将包含对象的3D数组展平为2D,通过它的参数删除重复的对象

Szy*_*oda 5 javascript arrays multidimensional-array underscore.js

我有一个里面有对象的3D数组:

[
    [{ id: 1 }, { id: 2 }],
    [{ id: 3 }],
    [{ id: 3 }, { id: 4 }]
]
Run Code Online (Sandbox Code Playgroud)

如何压扁它包括删除重复的id参数?

[{ id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }]
Run Code Online (Sandbox Code Playgroud)

我认为下划线会对此有所帮助

Cym*_*men 2

您可以使用 Underscore flattenunique来完成此操作。但是,每当您使用多个下划线操作时,最好考虑使用与和的下划线链接chainvalue

var data = [
    [{ id: 1 }, { id: 2 }],
    [{ id: 3 }],
    [{ id: 3 }, { id: 4 }]
];

var result = _.chain(data)
                  .flatten()
                  .uniq(function(o) {
                      return o.id;
                   })
                  .value();

console.log('result', result);
Run Code Online (Sandbox Code Playgroud)

JSFiddle: http: //jsfiddle.net/0udLde0s/3/

使用当前的 Underscore.js 甚至更短

如果您使用最新版本的 Underscore.js(我现在尝试的是 1.8.3),您可以使用它,.uniq('id')这样它会更短:

var result = _.chain(data)
                  .flatten()
                  .uniq('id')
                  .value();
Run Code Online (Sandbox Code Playgroud)