如何查找和匹配JSON对象数组中的特定值?

时间:2018-02-28 17:21:09

标签: javascript arrays json ecmascript-5

我见过很多类似的问题,但似乎没有什么能与我想做的完全匹配。我能够让代码正常工作,但是 我觉得它需要重构,我不知道该怎么做?

我有两个in循环,通过JSON获取我称之为item的每个对象。这工作,但我无法做另一个循环或找出一种方法来获得基于特定属性的项目值之一。所以我从我在这里找到的一些代码中创建了一个函数:Javascript: find an object in array based on object's property

我的问题是,这是编码的正确方法还是存在 另一个嵌套循环以某种方式更好的方式,这是我最初尝试的?

这是工作Plunker

代码:

var app = angular.module('myApp', []);

app.controller('MainCtrl', function($scope) {
  $scope.items = {"GROUP":[
            {"name":"Plan A","value":[163],"displayed":true},
            {"name":"Plan B","value":[497],"displayed":true},
            {"name":"Plan C","value":[324],"displayed":true},
            {"name":"Plan D","value":[476],"displayed":true},
            {"name":"Plan E","value":[343],"displayed":true}]};

     for (var key in $scope.items) {
       console.log("key is: " + key + " " + JSON.stringify($scope.items[key]));

        var item = $scope.items[key];
        for(var itemKey in item){
          //item is part of an object array
          console.log("item is an array: " + JSON.stringify(item)); 

          //itemKey is the number
          console.log("itemKey is: " + itemKey); 

          //Each item in the GROUP
          console.log("Each item: " + JSON.stringify(item[itemKey]));

          //The names in the items.
          console.log("The item name is: " + JSON.stringify(item[itemKey].name));

        }
        var objItem = findObjectByKey(item, 'name', 'Plan B');
        console.log("objItem is: " + JSON.stringify(objItem));
        console.log("objItem name is: " + JSON.stringify(objItem.name));
        console.log("objItem value is: " + JSON.stringify(objItem.value));
        console.log("objItem displayed is: " + JSON.stringify(objItem.displayed));
      }

      function findObjectByKey(array, key, value) {
          for (var i = 0; i < array.length; i++) {
              if (array[i][key] === value) {
                  return array[i];
              }
          }
          return null;
      }
});

以下是控制台输出

关键是:GROUP [ {“name”:“Plan A”,“value”:[163],“显示”:true}, {“name”:“Plan B”,“value”:[497],“显示”:true}, {“name”:“Plan C”,“value”:[324],“显示”:true}, {“name”:“Plan D”,“value”:[476],“显示”:true}, {“name”:“Plan E”,“value”:[343],“displayed”:true}]

itemKey是:0 itemKey是:1 itemKey是:2 itemKey是:3 itemKey是:4 itemKey是:5

项目名称为:“Plan A” 项目名称为:“B计划” 项目名称为:“Plan C” 项目名称为:“Plan D” 项目名称为:“Plan E”

这是我想要选择的数据。

objItem是:{“name”:“Plan B”,“value”:[497],“displayed”:true}

objItem名称是:“Plan B”

objItem值是:[497]

显示的objItem是:true

1 个答案:

答案 0 :(得分:1)

  • 假设您只有一个GROUP,则可以使用find函数。

&#13;
&#13;
var items = {"GROUP":[            
{"name":"Plan A","value":[163],"displayed":true},            
{"name":"Plan B","value":[497],"displayed":true},            
{"name":"Plan C","value":[324],"displayed":true},            
{"name":"Plan D","value":[476],"displayed":true},            
{"name":"Plan E","value":[343],"displayed":true}]};
            
var key = 'Plan B',
    object = items.GROUP.find(o => Object.entries(o).find(([k, value]) => k === 'name' && value === key) !== undefined);

console.log(object);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;