Как «объединить / объединить» массив и объект с одним и тем же свойством в плоский массив (используя Javascript)?

1

Поэтому у меня есть массив с некоторыми элементами: ['apple','banana','strawberry','peach','orange']. У меня также есть объект с одинаковыми элементами (но не со всеми) в качестве свойств:

{banana : 0,
strawberry : 2,
peach : 1}

Я хочу создать плоский массив с элементами и значениями theis, как показано ниже:

['apple',  'not found'
'banana',     '0'
'strawberry,  '2'
'peach',      '1'
'orange',  'not found']

И в конце я хочу записать данные в файл csv. Для этого я использую модуль fast-csv.

Я пробовал делать с циклом for. Есть ли более эффективный способ?

Изменение: изменили 2D-массив на плоский массив

Теги:
csv
arrays
javascript-objects

3 ответа

2
Лучший ответ

Вы можете использовать функцию Array.prototype.map для создания нового массива с требуемым выходом.

let array = ['apple','banana','strawberry','peach','orange'],
    obj = {banana : 0,strawberry : 2,peach : 1},
    result = array.map(s => [s, s in obj ? obj[s] : "Not found"]);
    
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
  • 0
    Это не совсем нужный результат. Это должен быть result = [].concat(...array.map(s => [s, s in obj ? obj[s] : "Not found"])); производить желаемый результат плоского массива, а не многомерного массива.
  • 1
    Я думаю, что OP не знает значения 2D-массива, учитывая его желаемый результат в вопросе - это означает, что он ищет плоский массив.
Показать ещё 2 комментария
1
var item = ['apple','banana','strawberry','peach','orange'];
var it = {banana : 0,strawberry : 2,peach : 1};

item.map((key)=>{ return[ key, !it.hasOwnProperty(key) ? 'not found': it[key]];  })
  • 0
    У вас есть объяснение вашего ответа?
  • 0
    Да, @rassar, так что требование было к 2d массиву, который я создал, вы можете проверить это. и просто проверяем, существует ли свойство объекта, если да, тогда используйте key еще not found .
0

Если вы хотите получить плоский массив (а не 2D) в соответствии с вашим примером вывода, вы можете объединить ответ от @Ele и добавить оператор с расширением следующим образом:

let array = ['apple','banana','strawberry','peach','orange'],
    obj = {banana : 0,strawberry : 2,peach : 1},
    result = [].concat(...array.map(s => [s, s in obj ? obj[s] : "Not found"]));
    
console.log(result);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню