首页 > 解决方案 > 如何根据javascript中存在的键等条件获取新的数组对象

问题描述

如果键存在于 JavaScript 中,我想知道如何创建一个新的数组对象。

我有两个数组对象,arr1并且arr2. 在arr2中,如果c值为 true 并且 keyarr1和 value 相等,则将其推送到新的数组对象。如果arr2of 的 key-value 为 true 并且与 的键匹配arr1,则推送到 JavaScript 中的新数组。

var arr1 = {
    data:[
      {id:1, place: "IN", year: "2020", mode: "ON"},
      {id:3, place: "TH", year: "2022", mode: "OFF"},
      {id:5, place: "AU", year: "2025", mode: "ON"} 
    ]
};
var arr2=[
  {a: "place", c: true},
  {a: "year", c: true},
  {a: "mode", c: false},
]

var finals = [];

var result = arr1.data.map(e=>{
  arr2.forEach(i=>{
    if(i.c == true && Object.keys(e)){
     finals.push(e);
    }
  })
  return finals
})

预期输出:

[
  {place: "IN", year: "2020"}
  {place: "TH", year: "2022"},
  {place: "AU", year: "2025"}
]

标签: javascriptarraysloopsobject

解决方案


你快到了。

  1. arr1.data.map创建一个新数组,
  2. 对于 arr1 中的每个项目,创建一个新对象newObj
  3. 循环遍历每个arr2
  4. 如果为真,则在 中添加key.a相应的值itemkey.c
  5. 返回newObj

var arr1 = {
    data:[
      {id:1, place: "IN", year: "2020", mode: "ON"},
      {id:3, place: "TH", year: "2022", mode: "OFF"},
      {id:5, place: "AU", year: "2025", mode: "ON"} 
    ]
};

var arr2=[
  {a: "place", c: true},
  {a: "year",  c: true},
  {a: "mode",  c: false},
];

var result = arr1.data.map(item => {  // 1
  let newObj = {};       // 2

  arr2.forEach(key => {  // 3
    if (key.c) {         // 4
      newObj[key.a] = item[key.a]
    }
  });

  return newObj          // 5
})

console.log(result)


推荐阅读