我有两个数组。每个都填满了唯一的识别码。我想取第一个数组
array1 = [
{"name":"sos", "id":112},
{"name":"apa", "id":671},
{"name":"dos", "id":003},
]
并根据每个ID值使其顺序与array2的顺序相匹配。这样array1的每个id都等于array2,反之亦然。换句话说,对于每个小于或等于数组长度的x值,array1x.id,==,array2x.id。
array2 = [
{"name":"sqe", "id":671},
{"name":"pep", "id":003},
{"name":"try", "id":163},
]
我还想删除array1中在array2中没有对应id的任何元素。并将id值不在array1但在array2中的任何元素添加到array1中,同时再次根据其id号对其进行排序。Array1必须保留与每个id值相关联的名称,但是当添加新元素时,可以将其名称设置为array2中与其相关的id的名称。
我似乎无法在不遇到可能搞乱我的订单的特殊情况下实现这一点。
发布于 2019-06-13 07:17:27
从array2
构建一个数组,给出每个id值的索引:
var indexes = array2.reduce(function(map, entry, index) {
map[entry.id] = index;
return map;
}, {});
现在,您可以从array1
创建一个新阵列
var newArray1 = array1.reduce(function(a, entry) {
a[indexes[entry.id]] = entry;
return a;
}, []);
现在,在您的示例数据中,您的array2
没有包含array1
中存在的所有id值。从你的问题看,在这种情况下应该怎么做并不清楚。
一种方法是从array2
中的所有id值创建一个查找表,然后将array1
中缺少的id值与一些更大的索引值添加到该表中。
发布于 2019-06-13 07:38:24
,它会删除数组中的项
array1 = [ {"name":"sos", "id":112},{"name":"apa", "id":671},{"name":"dos", "id":003}]
array2 = [ {"name":"sqe", "id":671},{"name":"pep", "id":003},{"name":"try", "id":163}]
array2 = array2.filter((item2, i) => {
let match = false;
array1.forEach((item1, j) => {
if(item1.id == item2.id) return match = true;
})
return match
})
console.log(array1)
console.log(array2)
发布于 2019-06-13 07:47:17
通过array1
构建地图
let map1 = new Map(array1.map(e => [e.id, e]))
然后迭代您的array2
并将每个项目映射到array1
中对应的项目。
let newArray1 = array2.map(e => map1.get(e.id));
https://stackoverflow.com/questions/56571451
复制相似问题