我是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]
答案 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()
方法将创建一个新数组,其中包含所有通过提供的功能实现的测试的元素。
includes()
方法确定数组的条目中是否包含某个值,并根据需要返回true或false。
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,我还是建议您像reduce
(take 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];