猿问

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

我是 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]


潇湘沐
浏览 564回答 3
3回答

RISEBY

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

翻翻过去那场雪

你可以试试 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);

Smart猫小萌

您可以使用诸如 的高阶函数来完成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]
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答