将数组与对象数组匹配并获取值

时间:2019-10-19 04:05:59

标签: javascript

我是JS新手。 我有一个如下所述的对象数组,并且我有一个带值的数组。我可以描述一下预期的输出吗?

var jsObjects = [
   {a: 1, b: 2}, 
   {a: 3, b: 4}, 
   {a: 5, b: 6}, 
   {a: 7, b: 8}
];

var myArray = [4,6,8]

Output: [3,5,7]

4 个答案:

答案 0 :(得分:1)

您可以使用new Map()来存储键值对,其中b是键,而a是值。之后,您可以使用构建的映射将.map()值数组b转换为a值数组:

const jsObjects = [
   {a: 1, b: 2}, 
   {a: 3, b: 4}, 
   {a: 5, b: 6}, 
   {a: 7, b: 8}
];

const myArray = [4,6,8];

const search = new Map(jsObjects.map(({a, b}) => [b, a]));
const res = myArray.map(v => search.get(v));
console.log(res);

答案 1 :(得分:0)

您可以尝试使用Array.prototype.filter()

  

filter()方法将创建一个新数组,其中包含所有通过提供的功能实现的测试的元素。

Array.prototype.includes()

  

includes()方法确定数组的条目中是否包含某个值,并根据需要返回true或false。

还有Array.prototype.map()

  

map()方法创建一个新数组,其结果是在调用数组中的每个元素上调用提供的函数。

var jsObjects = [
   {a: 1, b: 2}, 
   {a: 3, b: 4}, 
   {a: 5, b: 6}, 
   {a: 7, b: 8}
];

var myArray = [4,6,8]

var resArray = jsObjects.filter(i => myArray.includes(i.b)).map(i => i.a);
console.log(resArray);

答案 2 :(得分:0)

您可以使用filter, map, find e.t.c之类的高阶函数来完成此操作,但是正如您所说的,您是javascript新手-我认为这是理解和获得预期结果的最简单方法。

var jsObjects = [
   {a: 1, b: 2}, 
   {a: 3, b: 4}, 
   {a: 5, b: 6}, 
   {a: 7, b: 8}
];

var myArray = [4,6,8]

var finalArray = [];

for(let bValue of myArray) {
  for(let item in jsObjects) {
    if(bValue == jsObjects[item].b) {
      finalArray.push(jsObjects[item].a);
    }
  }
}

console.log(finalArray); // [3, 5, 7]

答案 3 :(得分:0)

有N种方法,没有一种无需添加任何逻辑。

即使您不熟悉JS,我还是建议您像reducetake a look here to know more about HOF)一样使用HOF。

下面是一个示例:

const jsObjects = [
  { a: 1, b: 2 },
  { a: 3, b: 4 },
  { a: 5, b: 6 },
  { a: 7, b: 8 }
];

const myArray = [4, 6, 8];
const result = jsObjects.reduce((result, entry) => {
  if (myArray.includes(entry.b)) {
    result.push(entry.a);

    return result;
  }

  return result;
}, []);

console.log(result) // [3, 5, 7];
相关问题