#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; }