简体   繁体   English

根据过滤后的对象数组中的数据创建新的对象数组

[英]Create new array of objects based on data from a filtered array of objects

I have an array of objects with a key called 'selected' which is set to false. 我有一个对象数组,其键名为“ selected”,该键设置为false。 I have a filtered array of objects from the original list where the key 'selected' is set to true. 我从原始列表中筛选出一组对象,其中“选择”键设置为true。 How do I create a new array where the original list is updated with true values based on the filtered list? 如何创建一个新数组,其中基于过滤后的列表使用真实值更新原始列表?

 const data = [{ color: "red", value: "#f00", selected: false }, { color: "green", value: "#0f0", selected: false }, { color: "blue", value: "#00f", selected: false }, { color: "cyan", value: "#0ff", selected: false }, { color: "magenta", value: "#f0f", selected: false }, { color: "yellow", value: "#ff0", selected: false }, { color: "black", value: "#000", selected: false } ] const filtered = [{ color: "magenta", value: "#f0f", selected: true }, { color: "green", value: "#0f0", selected: true }, { color: "black", value: "#000", selected: true }] const newData = data.map(item => { item.selected = filtered.find(item1 => item1.id === item.id).selected return item }) console.log(newData) 

The end result should be 最终结果应该是

    [{
        color: "red",
        value: "#f00",
        selected: false
      },
      {
        color: "green",
        value: "#0f0",
        selected: **true**
      },
      {
        color: "blue",
        value: "#00f",
        selected: false
      },
      {
        color: "cyan",
        value: "#0ff",
        selected: false
      },
      {
        color: "magenta",
        value: "#f0f",
        selected: **true**
      },
      {
        color: "yellow",
        value: "#ff0",
        selected: false
      },
      {
        color: "black",
        value: "#000",
        selected: **true**
      }
    ]

Store the selected color names of the filtered array in a Set. filtered数组的选定颜色名称存储在Set中。 Then use the Set when mapping to decide which items are selected: 然后使用“映射时设置”来决定选择哪些项目:

 const data = [{"color":"red","value":"#f00","selected":false},{"color":"green","value":"#0f0","selected":false},{"color":"blue","value":"#00f","selected":false},{"color":"cyan","value":"#0ff","selected":false},{"color":"magenta","value":"#f0f","selected":false},{"color":"yellow","value":"#ff0","selected":false},{"color":"black","value":"#000","selected":false}] const filtered = [{"color":"magenta","value":"#f0f","selected":true},{"color":"green","value":"#0f0","selected":true},{"color":"black","value":"#000","selected":true}] const selectedSet = new Set(filtered.map(o => o.color)) const newData = data.map(o => selectedSet.has(o.color) ? ({ ...o, selected: true }) : o) console.log(newData) 

You need to check color property and return a new object with a change of the property if an object is found. 如果找到对象,则需要检查color属性并返回一个具有更改的属性的新对象。

 const data = [{ color: "red", value: "#f00", selected: false }, { color: "green", value: "#0f0", selected: false }, { color: "blue", value: "#00f", selected: false }, { color: "cyan", value: "#0ff", selected: false }, { color: "magenta", value: "#f0f", selected: false }, { color: "yellow", value: "#ff0", selected: false }, { color: "black", value: "#000", selected: false }], filtered = [{ color: "magenta", value: "#f0f", selected: true }, { color: "green", value: "#0f0", selected: true }, { color: "black", value: "#000", selected: true }], newData = data.map(item => { var object = filtered.find(item1 => item1.color === item.color); return Object.assign({}, item, object && { selected: object.selected }); }); console.log(newData) 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM