在Javascript/ES6中,如何基于从一个数组中筛选两个具有筛选条件的数组来创建对象?

在Javascript/ES6中,如何基于从一个数组中筛选两个具有筛选条件的数组来创建对象?,javascript,ecmascript-6,Javascript,Ecmascript 6,假设有两个长度相同的数组: const arr_one = [1,2,null,4,null,6]; const arr_two = ["a","b","c","d","e","f"]; 现在我想创建一个名为arr\u final的对象,它使用arr\u two的值作为键,而arr\u one的值作为值用于arr\u final,但仅用于arr\u one中不为null的值 因此,预期的结果将是: const obj_final = {"a": 1, "b": 2, "d": 4, "f":

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

const arr_one = [1,2,null,4,null,6];
const arr_two = ["a","b","c","d","e","f"];
现在我想创建一个名为
arr\u final
的对象,它使用
arr\u two
的值作为
,而
arr\u one
的值作为
用于
arr\u final
,但仅用于
arr\u one
中不为
null
的值

因此,预期的结果将是:

const obj_final = {"a": 1, "b": 2, "d": 4, "f": 6}
当前解决方案

目前,我有一个带有if检查的for循环,并希望将其更改为更简短的代码:

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

如何用最少的代码行实现这一点?

您的代码看起来是最佳的,下面是解决方案的另一个版本:

const arr_one=[1,2,null,4,null,6];
常数arr_二=[“a”、“b”、“c”、“d”、“e”、“f”];
让arr_final={}
arr_one.map((itm,indx)=>{
如果(itm!==null){
arr_final[arr_two[indx]]=itm
}
})

log(arr_final)
这里是最短的一行方法,只需要一次数组迭代

const arr_one=[1,2,null,4,null,6];
常数arr_二=[“a”、“b”、“c”、“d”、“e”、“f”];
常数fa=arr_-one.reduce((a,e,i)=>e?{…a[arr_-two[i]]:e}:a,{});

控制台日志(fa)使用lodash zipObject实用程序
这里有一个参考:

您当前的代码非常合理。我不会改变它(除了
let
->
const
,以及
=
=
)。另一个选项是
Object.fromEntries
.filter
,这两个选项功能更强,但可能更长