Javascript映射到obj数组与另一个数组,以获得不同的键值

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.我可以从返回的数组中过滤掉未定义的内容,但似乎有更清晰/更有效的方法来执行此操作.

实现这一目标的最简洁方法是什么?

Nin*_*olz 5

您可以使用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)