Javascript 如何根据JS中的匹配值将两个数组与对象组合?

Javascript 如何根据JS中的匹配值将两个数组与对象组合?,javascript,arrays,set,Javascript,Arrays,Set,用另一个数组中基于匹配值的数组替换数组中的字符串的最佳方法是什么? 我已经为此磨牙将近一个星期了,但到目前为止运气不好 假设我们有以下3个JavaScript数组: // Array with list of content: [ [ {id: "1-AAA", content: "foo"}, {id: "1-AAA", content: "foo"}, {id: "1-AAA

用另一个数组中基于匹配值的数组替换数组中的字符串的最佳方法是什么? 我已经为此磨牙将近一个星期了,但到目前为止运气不好

假设我们有以下3个JavaScript数组:

// Array with list of content:
[
  [
    {id: "1-AAA", content: "foo"},
    {id: "1-AAA", content: "foo"},
    {id: "1-AAA", content: "bar"},
    {id: "1-AAA", content: "baz"},
    {id: "1-AAA", content: "baz"}
  ],
  [
    {id: "1-CCC", content: "bar"}
  ],
  [
    {id: "1-DDD", content: "foo"}
  ],
  [
    {id: "2-AAA", content: "foo"},
    {id: "2-AAA", content: "bar"},
    {id: "2-AAA", content: "bar"}
  ]
]


如何将第一个数组中的内容值作为内容数组分配给特定id(请参见下面的代码片段)?最好只具有唯一值(例如,通过使用[…新设置(内容)]



到目前为止,我尝试了许多不同的方法,但找不到重新分配嵌套数组的好方法。。任何帮助都将不胜感激!提前谢谢各位

首先,您可以创建一个查找表,以便根据id轻松查找内容数组:

"1-AAA": ["foo", "foo", "bar", "baz", "baz"],
"1-CCC": ["bar"],
"1-DDD": ["foo"],
"2-AAA": ["foo", "bar", "bar"]
下面我将使用一个名为
transform()
的函数来完成此操作,它将从您的第一个数组中构建上述形状的一个数组

然后,您可以使用该方法筛选数组以删除内容为
未定义的任何对象。最后,您可以将每个对象添加到一个新对象,其中每个新对象都具有原始对象的属性(这是使用)以及修改的
内容
属性。要修改内容,可以使用上面的查找表获取“内容”数组,并附加当前对象的内容值。然后,您可以将其包装在一个文件夹中以删除任何重复项:

const arr=[{id:“1-AAA”,content:“foo”},{id:“1-AAA”,content:“foo”},{id:“1-AAA”,content:“baz”},{id:“1-AAA”,content:“baz”},{id:“1-CCC”,content:“bar”},{id:“1-DDD”,content:“foo”},{id:“2-AAA”,content:“foo”},{id:“2-AAA”,content:“bar”},{id:“2-AAA”,content:“bar”];
const transform=arr=>新映射(arr.Map(内部=>{
常量[{id}]=内部;
返回[id,internal.map(({content}=>content)];
}));
常量replaceObj=(映射,arr)=>arr
.filter(({content})=>content)
.map(o=>({…o,内容:[…新集合([…map.get(o.id),o.content])]));
常量查找=变换(arr);
log(replaceObj(查找,[{id:“1-AAA”,内容:“baz”},{id:“1-BBB”,内容:未定义的},{id:“1-CCC”,内容:“bar”},{id:“1-DDD”,内容:“foo”},{id:“1-EEE”,内容:未定义的}]);
log(replaceObj(查找,[{id:“2-AAA”,内容:“bar”},{id:“2-BBB”,内容:未定义的},{id:“2-CCC”,内容:未定义的},{id:“2-DDD”,内容:未定义的},{id:“2-EEE”,内容:未定义的}])
// Array 2 with unique id's and last known content:
[
  {id: "2-AAA", content: "bar"},
  {id: "2-BBB", content: undefined},
  {id: "2-CCC", content: undefined},
  {id: "2-DDD", content: undefined},
  {id: "2-EEE", content: undefined}
]
// Intended result for array 1:
[
  {
    id: "1-AAA",
    content: ["foo", "bar", "baz"]
  },
  {
    id: "1-CCC",
    content: ["bar"]
  },
  {
    id: "1-DDD",
    content: ["foo"]
  }
]
// Intended result for array 2:
[
  {
    id: "2-AAA",
    content: ["foo", "bar"]
  }
]
"1-AAA": ["foo", "foo", "bar", "baz", "baz"],
"1-CCC": ["bar"],
"1-DDD": ["foo"],
"2-AAA": ["foo", "bar", "bar"]