检查对象中的数组值(如果有键),然后推入新数组

时间:2019-03-26 05:14:51

标签: javascript arrays

我正在尝试实现这一点,在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'] ]

4 个答案:

答案 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.filterArray.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)