Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
合并javascript数组_Javascript_Arrays_Merge_Concat - Fatal编程技术网

合并javascript数组

合并javascript数组,javascript,arrays,merge,concat,Javascript,Arrays,Merge,Concat,我有这样一个数组: [ 32545343: { data: [{id: 1}, {id: 2}] }, 547347: { data: [{id: 1}, {id: 4}] }, 95757: { data: [{id: 1}, {id: 6}] }, ] [{id: 1}, {id: 2}, {id: 4}, {id: 6}] 如何将所有数据数组合并到单个数组中,而不复制具有相同id的对象,如下所示: [ 32545343: {

我有这样一个数组:

[
  32545343: {
    data: [{id: 1}, {id: 2}]
  },
  547347: {
    data: [{id: 1}, {id: 4}]
  },
  95757: {
    data: [{id: 1}, {id: 6}]
  },
]
[{id: 1}, {id: 2}, {id: 4}, {id: 6}]
如何将所有数据数组合并到单个数组中,而不复制具有相同id的对象,如下所示:

[
  32545343: {
    data: [{id: 1}, {id: 2}]
  },
  547347: {
    data: [{id: 1}, {id: 4}]
  },
  95757: {
    data: [{id: 1}, {id: 6}]
  },
]
[{id: 1}, {id: 2}, {id: 4}, {id: 6}]

假设您有一个对象,那么这个解决方案将使用一个临时对象来收集相同的对象

var data={32545343:{data:[{id:1},{id:2}]},547347:{data:[{id:1},{id:4}]},95757:{data:[{id:1},{id:6}]},
结果=功能(对象){
var r=[];
Object.keys(对象).forEach(函数(k){
对象[k].data.forEach(函数(a){
如果(!此[a.id]){
这个[a.id]=a;
r、 推(a);
}
},这个);
}, {});
返回r;
}(数据);

document.write(“”+JSON.stringify(结果,0,4)+“”)问题不正确,不能像映射[x:1,y:1]那样定义数组,正确的定义:

Array.prototype.flatMap = function(lambda) { 
    return Array.prototype.concat.apply([], this.map(lambda)); 
};
一个解决方案是使用flatmap(这里有一个实现:)

然后可以转换(不要忘记a不是数组,它是对象!)

使用结构的解决方案

vard={32545343:{data:[{id:1},{id:2}]},547347:{data:[{id:1},{id:4}]},95757:{data:[{id:1},{id:6}]};
变量集=新集();
Object.keys(d).forEach(a=>
d[a].data.forEach(b=>set.add(JSON.stringify(b));

document.write(Array.from(set))您可以采用一种功能性方法,从每个对象的数据数组创建的扁平数组中挑选出唯一的对象


它不是一个有效的数组结构,在我看来它的语法无效-您不能在数组上定义键,只能在对象上定义键。你最外层的
[
]
应该是
{
}
。你确定你有一个数组吗?遗憾的是,这不会重复对象(你有3个id为
id
=1的对象。我使用元素的第一次出现,通过id为不同的元素添加了一个解决方案。
function flatten(arr) {
  return arr.reduce(function (p, c) {
    return p.concat(c);
  }, []);
}

function pluck(obj, key) {
  return Object.keys(obj).map(function (el) {
    return obj[el][key];
  });
}

function unique(arr, key) {
  var ids = [];
  return arr.filter(function (el) {
    if (ids.indexOf(el[key]) === -1) {
      ids.push(el[key]);
      return true;
    }
  });
}

var result = unique(flatten(pluck(obj, 'data')), 'id');