如何基于用Javascript / ES6中的一个数组中的过滤条件过滤两个数组来创建对象?

问题描述 投票:0回答:3

假设我有两个相同长度的数组:

const arr_one = [1,2,null,4,null,6];
const arr_two = ["a","b","c","d","e","f"];

现在,我要创建一个名为arr_final的对象,该对象使用arr_two的值作为keysarr_one的值用作values,但仅用于arr_final中的值。不是arr_onenull

所以期望的结果将是:

const obj_final = {"a": 1, "b": 2, "d": 4, "f": 6}

当前解决方案

当前,我正在for循环中进行if检查,并希望将其更改为更短的代码:

let arr_final = {};
for (const [i, v] of arr_one.entries()) {
    if (v != null) {
        arr_final[arr_two[i]] = v
    }
};

如何用最少数量的代码行实现这一目标?

javascript ecmascript-6
3个回答
0
投票

您可以使用ES6阵列函数。

它可能看起来更短,但更难阅读且运行起来较重,不建议这样做。

您的方法更容易理解和更快。我建议像CertainPerformance那样保留它。

const arr_one = [1,2,null,4,null,6];
const arr_two = ["a","b","c","d","e","f"];

const obj_final = Object.fromEntries(arr_two.map((e, i) => [e, arr_one[i]]).filter(e => e[1] !== null));

console.log(obj_final);

0
投票

您的代码看起来很理想,这是您的解决方案的另一个版本:

const arr_one = [1,2,null,4,null,6];
const arr_two = ["a","b","c","d","e","f"];

let arr_final={}
arr_one.map((itm,indx)=>{
  if(itm!==null){
    arr_final[arr_two[indx]]=itm
  }
})
    console.log(arr_final)

0
投票

这是最短的单线方法,仅需要1个数组迭代

const arr_one = [1,2,null,4,null,6];
const arr_two = ["a","b","c","d","e","f"];

const fa = arr_one.reduce((a, e, i) => e ? { ...a, [arr_two[i]]: e } : a ,{});
console.log(fa);
© www.soinside.com 2019 - 2024. All rights reserved.