как преобразовать массив чисел в словарь

#javascript #arrays

#javascript #массивы

Вопрос:

Я пытаюсь использовать следующий код:

 dict=deliveryDays.split(";").map((item,i)=>{
    return ({ i :item})
});
  

deliveryDays — это массив чисел, но i внутри { i :item} не является i, проходящим по карте.
чего я хочу, так это:

 [{0:"1", 1:"1", 2:"1" }]
  

но то, что я вижу, это:

 [{"i":"0"},{"i":"1"},{"i":"1"}]
  

Итак, как вы можете видеть, i не получает правильного значения i.
Как я могу этого добиться?

Комментарии:

1. Что такое входные данные?

Ответ №1:

Вы можете использовать синтаксис распространения, чтобы распространить свой массив внутри нового объекта. Я не вижу смысла иметь массив, включающий только один объект, на основе вашего ожидаемого результата: [{0:"1", 1:"1", 2:"1" }] . Итак, мое первое предположение будет заключаться в том, что вам нужно это::

 let deliveryDays = "1;2;3;4;5"
let obj = {...deliveryDays.split(";")};
console.log(obj);  
 .as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}  

Если вам все еще нужен единственный объект внутри массива, то легко понять, что следующий код сделает это:

 let obj = [{...deliveryDays.split(";")}];
  

С другой стороны, если вам нужен массив с несколькими объектами, то вы можете сделать это:

 let deliveryDays = "1;2;3;4;5"
let res = deliveryDays.split(";").map((x, idx) => ({[idx]: x}));
console.log(res);  
 .as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}  

Комментарии:

1. Вы получаете object , и я думаю, что OP хочет array

2. @YosvelQuintero оп говорит, что хотел этого: [{0:"1", 1:"1", 2:"1" }] Я уточнил, что для меня нет смысла иметь только один объект внутри массива. Но я включил альтернативный вариант на всякий случай.

3. Хороший ответ.. У меня было плохое понимание, и я обновил свой ответ.. Спасибо

Ответ №2:

Используйте обозначение в [] квадратных скобках для вычисления значения i . Итак, в вашем случае он не вычисляется, а просто выводится "i" в виде строки в ключе объекта.

 const deliveryDays = "1;2;3;4";
const dict = deliveryDays.split(";").map((item,i)=> ({[i]:item}));
console.log(dict);  

Но я полагаю, что вы хотите, чтобы это было как единый объект, заключенный в массив, что можно сделать с помощью Array.reduce :

 const deliveryDays = "1;2;3;4";
const dict = deliveryDays.split(";").reduce((acc,item,i)=>{
  acc[i] = item;
  return acc;
},{});
console.log([dict]);  

Ответ №3:

Вы можете использовать Object.assign():

 const deliveryDays = '1;2;3;4;5;6';
const dict = [Object.assign({}, deliveryDays.split(';'))];

console.log(dict);  
 .as-console-wrapper { max-height: 100% !important; top: 0; }  

Ответ №4:

Вы можете использовать синтаксис Spread

 const arr = [0, 1, 1];
let result = [{...arr}]
console.log(result);  

Ответ №5:

Еще один способ — использовать Object.entries

 const deliveryDays = [1, 2, 3, 4, 5, 6];
const dict = Object.entries(deliveryDays).map(([key,value])=>({[key]:value}))

console.log(dict);  
 .as-console-wrapper { max-height: 100% !important; top: 0; }