Как создать объект на основе фильтрации двух массивов с критериями фильтрации из одного массива в Javascript / ES6? - PullRequest
1 голос
/ 19 февраля 2020

Предположим, у меня есть два массива одинаковой длины:

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

Теперь я хотел бы создать из него один объект с именем arr_final, который использует значения arr_two как keys и значения arr_one как values для arr_final, но только для значений в arr_one, которые не null.

Таким образом, желаемый результат будет:

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

Текущее решение

В настоящее время у меня есть для l oop с if проверьте внутри него и хотели бы изменить его на более короткий код:

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

Как мне добиться этого с минимальным количеством строк кода?

Ответы [ 3 ]

1 голос
/ 19 февраля 2020

Вот самый короткий однострочный подход, требующий только 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);
0 голосов
/ 19 февраля 2020

Используйте loda sh Утилита zipObject Вот ссылка: https://lodash.com/docs/4.17.15#zipObject

0 голосов
/ 19 февраля 2020

Ваш код выглядит оптимально, вот еще одна версия вашего решения:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...