【问题标题】:Find in JSON array by manually entered ID通过手动输入的 ID 在 JSON 数组中查找
【发布时间】:2019-04-02 03:12:02
【问题描述】:

在我的 angularjs 应用程序中,我从 API 获取 JSON 对象。 我有一个输入字段,可以手动输入ID,如果有这个ID的项目存在,我需要更改他的属性。 我还将这个 ID 存储到 sessionStorage,所以当用户刷新页面时,他会像刷新之前一样获得值。

这是来自 API 的 json,如果存在,我需要将 ON THE FLY 属性 SHOW 更改为 true

$scope.tableParams.data = [
 {id: 1015, type: "ssss", show: false},
 {id: 1016, type: "ssss", show: false},
 {id: 1017, type: "ssss", show: false},
 {id: 1018, type: "ssss", show: false}
]

获取输入值并存储到会话存储,以及更改 SHOW 属性的功能

$scope.getIndex = function (indexOfRow) { //indexOfRow is passed data from input field
       //here I want to change show to true for passed id 

        sessionStorage.setItem("indexOfOpenedRow", JSON.stringify(indexOfRow));
    }

我尝试从here 回答但不适合我

我也试试这个,但总是得到undefined

function findId(array, id) {
        var i, found, obj;
        for (i = 0; i < array.length; ++i) {
          obj = array[i];
          if (obj.id == id) {
            console.log(obj);
            return obj;
          }
        }
        return undefined; // <= You might consider null or undefined here
      }
$scope.getIndex = function (indexOfRow) { //indexOfRow is passed data from input field
       //here I want to change show to true for passed id 
        angular.forEach($scope.tableParams.data, function(key, value){
            var result = findId(key.id, indexOfRow);
            console.log(result);
        });
        sessionStorage.setItem("indexOfOpenedRow", JSON.stringify(indexOfRow));
    }

【问题讨论】:

  • 您的 findId 函数需要一个数组和一个整数作为其参数。 findId(key.id, indexOfRow); 这让您看起来像是在向其中传递两个整数。我希望像findId( $scope.tableParams.data, indexOfRow );

标签: javascript angularjs


【解决方案1】:

Filter 是您要搜索的函数。当我通过阅读您的代码了解您的问题时,您想将单独的 ID 与 JSON 中的 ID 进行比较?如果我在这里推荐错误,我将编辑答案:

function findIDAndSetShowingTrue(array, id) {
    return array.filter(curr=> curr.id === id).map(curr => ({...curr, show: true}));
}
  • filter 函数遍历数组中的每个子元素,并为您提供特定的值 (array.filter)。
  • 然后您可以使用这个子节点,并将其作为 if 语句与其他一些值(current)进行比较。
  • 最后,您比较 current.id 和您的输入 id (current.id === id),如果为真则返回 current 对象。

【讨论】:

  • 这是真的。请问,你现在能帮助我如何以这种方式将属性 SHOW 更改为 true 吗?对于这个返回的 id
  • 查看Array#find。我认为它更适合这种情况。
  • @Thomas 谢谢,找到是我尝试的第一件事,但在这种情况下对我不起作用
  • @Arter - 现在答案应该可以解决您的问题 - 如果您还需要显示值 == false 的旧数组对象,您需要使用我在地图中使用的相同语法:(。 ..curr,显示:真)。这称为扩展运算符,您可以使用它组合两个数组 - 它的工作方式类似于 Object.assing。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-22
  • 2020-02-29
  • 2021-09-04
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 2022-11-10
相关资源
最近更新 更多