Cha*_*tar 5 javascript arrays object
所以我不确定为什么我有这么困难的时间,但是我有一个id数组,我试图用它来映射一个对象数组以找到相应的id,但从不同的键返回值.
即:
arr=[13, 1, 16]
arrObj= [{
id: 1,
name: "cat"
}, {
id: 10,
name: "tiger",
}, {
id: 3,
name: "dog",
}, {
id: 16,
name: "bear",
}, {
id: 8,
name: "fish",
}, {
id: 13,
name: "goat",
}]
Run Code Online (Sandbox Code Playgroud)
我希望它返回:
["goat", "cat", "bear"]
我有一个嵌套的map函数,它执行此操作但返回未定义的对象没有相应的ID.我可以从返回的数组中过滤掉未定义的内容,但似乎有更清晰/更有效的方法来执行此操作.
实现这一目标的最简洁方法是什么?
您可以使用Array#map和搜索Array#find相应的对象.然后name作为返回值.
var arr = [13, 1, 16],
arrObj = [{ id: 1, name: "cat" }, { id: 10, name: "tiger" }, { id: 3, name: "dog" }, { id: 16, name: "bear" }, { id: 8, name: "fish" }, { id: 13, name: "goat" }],
result = arr.map(id => arrObj.find(o => o.id === id).name);
console.log(result);Run Code Online (Sandbox Code Playgroud)
对于大量数据,您可以Map通过映射键值对来构建它,然后映射地图的结果.
var arr = [13, 1, 16],
arrObj = [{ id: 1, name: "cat" }, { id: 10, name: "tiger" }, { id: 3, name: "dog" }, { id: 16, name: "bear" }, { id: 8, name: "fish" }, { id: 13, name: "goat" }],
result = arr.map(
Map.prototype.get,
new Map(arrObj.map(({ id, name }) => [id, name]))
);
console.log(result);Run Code Online (Sandbox Code Playgroud)