【问题标题】:How to find a value in nested array in javascript如何在javascript中的嵌套数组中查找值
【发布时间】:2018-08-30 03:12:37
【问题描述】:

这是我的查询,

var id = [1,2];

var oparr = [{
    "off": [{
        id: 1,
        val: "aaa"
      },
      {
        id: 3,
        val: "bbb"
      }
    ]
  },
  {
    "off1": [{
      id: 2,
      val: "cccc"
    }]
  }
];

从上面的oparr数组中我需要找到id数组,我需要这个结果

var arr = {
    finalval: [
    {
        id: 1,
        off: true,
        off1: false
    }, 
    {
        id: 2,
        off: false,
        off1: true
    }]
}

如果 id 在 off[0] 中,我需要将 off1 设置为 true,off2 设置为 false。

我尝试使用下划线 js indexoffindfindWhere,但没有得到想要的结果格式。

【问题讨论】:

  • 对象是否只有 2 个属性(offoff1 仅)还是我们期待更多?
  • 感谢大家的宝贵时间和及时的帮助..继续帮助他人!!!

标签: javascript jquery angularjs node.js underscore.js


【解决方案1】:

var oparr = [
   {
      "off":[
         {
            id:1,
            val:"aaa"
         },
         {
            id:3,
            val:"bbb"
         }
      ]
   },
   {
      "off1":[
         {
            id:2,
            val:"cccc"
         }
      ]
   }
];

var offs = [];
var finalval = [];

for(var i=0; i<oparr.length; i++) {
  var _tmp1 = oparr[i];
  for(var prop in _tmp1) {
    offs.push(prop);    
    var _tmp2 = _tmp1[prop];
    for(var j=0; j<_tmp2.length; j++) {
      var result = {};
      finalval.push(result);
      result.id = _tmp2[j].id;
      result[prop] = true;
    }
  }
}
for(var i=0; i<finalval.length; i++) {
  for(var j=0; j<offs.length; j++) {
    if (!finalval[i][offs[j]]) {
      finalval[i][offs[j]] = false;
    }
  }
}
var arr = {"finalval":finalval};
console.log(arr);

【讨论】:

    【解决方案2】:

    试试这个

    var id = [1, 2];
    
    var oparr = [{
            "off": [{
                    id: 1,
                    val: "aaa"
                },
                {
                    id: 3,
                    val: "bbb"
                }
            ]
        },
        {
            "off1": [{
                id: 2,
                val: "cccc"
            }]
        }
    ];
    
    var b = id.map((x) => {
        return oparr.reduce((a, data) => {
            var key = Object.keys(data)[0];
            Object.assign(a, data[key].reduce((obj, ele) => {
                if (!obj[key])
                    obj[key] = (ele.id == x);
                return obj;
            }, {
                id: x
            }));
            return a;
        }, {})
    })
    console.log(b);

    【讨论】:

      【解决方案3】:

      var id = [1,2];
      
      var oparr = [
        {
          "off": [
              {
                  id: 1,
                  val: "aaa"
              },
              {
                  id: 3,
                  val: "bbb"
              }
          ]
        },
        {
          "off1": [
              {
                  id: 2,
                  val: "cccc"
              }
          ]
        }
      ];
      
      var arr = {
        finalval: [
          {
            id: 1,
            off: true,
            off1: false
          },
          {
            id: 2,
            off: false,
            off1: true
          }
        ]
      }
      
      
      var arr = {};
      arr.finalval = id.map((i) => {
      
        return {
          id  : i,
          off : oparr.find(object => "off" in object)["off"].some(object => object.id == i),
          off1: oparr.find(object => "off1" in object)["off1"].some(object => object.id == i),
        }
      
      });
      
      console.log(arr.finalval);

      【讨论】:

        【解决方案4】:

        您可以使用 Array 的 forEach() 尝试以下操作:

        var id = [1,2];
        
        var oparr = [
        {
        "off": [
            {
                id: 1,
                val: "aaa"
            },
            {
                id: 3,
                val: "bbb"
            }
        ]
        },
         {
        "off1": [
            {
                id: 2,
                val: "cccc"
            }
        ]
        }];
        var arr = {finalval: []};
        oparr.forEach(function(item){
          for(var key in item){
            item[key].forEach(function(i){
              if(id.includes(i.id) && key == 'off')
                arr.finalval.push({id: i.id, off: true, off1: false});
              else if(id.includes(i.id) && key == 'off1')
                arr.finalval.push({id: i.id, off: false, off1: true});
            });
          }
        });
        
        console.log(arr);

        【讨论】:

          【解决方案5】:

          此解决方案处理您可能拥有多个 offoff1 的情况(例如 off, off1, off2, off3 等)。

          var id = [1, 2];
          
          var oparr = [{
              "off": [{
                  id: 1,
                  val: "aaa"
                },
                {
                  id: 3,
                  val: "bbb"
                }
              ]
            },
            {
              "off1": [{
                id: 2,
                val: "cccc"
              }]
            }
          ];
          
          // get the off options (off, off1, off2 etc.)
          var offOptions = oparr.map(op => Object.keys(op)).reduce((a, c) => a.concat(c), []);
          
          var arr = {
            finalval: id.map(x => {
              var result = {
                id: x
              };
          
              // iterate through off options
              offOptions.forEach(op => {
                
                // iterate through oparr
                oparr.forEach(o => {
                  var vals = o[op];
                  if (vals) // check if off option exists
                    result[op] = vals.some(i => i.id === x); // check if index exists
                });
              });
          
              return result;
            })
          };
          
          console.log(arr);

          【讨论】:

            【解决方案6】:

            我希望这会有所帮助。谢谢。

            var id = [1, 2];
            
            var oparr = [{
                    "off": [{
                            id: 1,
                            val: "aaa"
                        },
                        {
                            id: 3,
                            val: "bbb"
                        }
                    ]
                },
                {
                    "off1": [{
                        id: 2,
                        val: "cccc"
                    }]
                }
            ];
            
            var test=[];
            
            for (var i = 0; i < oparr.length; i++) {
                for (var j = 0; j < Object.keys(oparr[i]).length; j++) {
                    for (var k = 0; k < id.length; k++) {
                        if(oparr[i][Object.keys(oparr[i])[j]][j].id==id[k]){
                            test.push(oparr[i][Object.keys(oparr[i])[j]][j]);
                        }
                    }
                }
            }
            
            console.log(test);

            【讨论】:

              猜你喜欢
              • 2018-01-02
              • 2019-08-15
              • 2021-07-23
              • 1970-01-01
              • 2022-01-12
              • 1970-01-01
              • 2018-03-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多