我正在尝试实现这一点,在onTruck中检查水果以找到现有的键,然后将其推入新数组。由于它们的长度不同,因此我将继续介绍如何循环播放它们。先谢谢了。
var fruits = ['apple', 'orange', 'banana']
var onTruck = {
'apple': 100,
'orange': 200,
'banana': 500,
'pineapple': 5,
'mango': 'empty'
}
let arr = []
Object.keys(onTruck).forEach((e, i) => {
console.log(e === fruit[]) <- Need to loop fruit
arr.push[...]
})
// OUTPUT:
arr = [['apple', '100'],['orange', '200'], ['banana', '500'] ]
答案 0 :(得分:3)
使用Array#map
方法基于键元素数组生成新数组。
var fruits = ['apple', 'orange', 'banana']
var onTruck = {
'apple': 100,
'orange': 200,
'banana': 500,
'pineapple': 5,
'mango': 'empty'
}
var arr = fruits.map(v => [v, onTruck[v]]);
// in case some fields may miss in onTruck then add an additional filter
var arr1 = fruits.filter(v => v in onTruck).map(v => [v, onTruck[v]]);
// or with reduce
var arr2 = fruits.reduce((a, v) => v in onTruck ? [...a, [v, onTruck[v]]] : a, []);
console.log(arr)
console.log(arr1)
console.log(arr2)
仅供参考::如果要忽略不是数字或值为empty
的属性,请使用其他过滤条件(或过滤器)。
为避免出现非数字值:!isNaN(onTruck[v])
用于避免使用值为'empty'
的属性:onTruck[v] !== 'empty'
例如:
var arr = fruits.filter(v => v in onTruck && !isNaN(onTruck[v])).map(v => [v, onTruck[v]]);
答案 1 :(得分:1)
您可以使用Array.filter
和Array.map
来简化代码:
var fruits = ['apple', 'orange', 'banana'];
var onTruck = {
'apple': 100,
'orange': 200,
'banana': 500,
'pineapple': 5,
'mango': 'empty'
}
const result = Object.keys(onTruck)
.filter((fruit) => fruits.includes(fruit))
.map((fruit) => [fruit, onTruck[fruit]]);
console.log(result);
答案 2 :(得分:0)
var newArray = fruits.filter(function(fruit) {
return fruit in onTruck;
}).map(function(fruit) {
return [fruit, onTruck[fruit]]
});
应该工作。基本上,我将过滤onTruck
中存在的水果,然后通过map函数构造所需的数组。
答案 3 :(得分:0)
var fruits = ['apple', 'orange', 'banana']
var onTruck = {
'apple': 100,
'orange': 200,
'banana': 500,
'pineapple': 5,
'mango': 'empty'
}
let arr = fruits.reduce((arr,b) => {
if (!isNaN(onTruck[b])){
arr.push([b, onTruck[b]]);
return arr;
} else return arr;
},[])
console.log(arr)