Javascript массив против объекта - PullRequest
0 голосов
/ 29 марта 2020

Это может быть нубский вопрос для вас, ребята, но я просто хочу кое-что прояснить. Я новичок в JS и знаю, что массивы - это просто объекты с полями в качестве индексов.

У меня здесь есть несколько строк кода. Цель довольно проста - передать функцию параметра в массив и сопоставить ее с другой.

Моя путаница заключается в том, что _obj объявлен как объект с _obj = {}, и мы должны сделать _obj[obj.key] = obj.value для сопоставления ключей и значений. Что на самом деле происходит здесь? Это заставляет меня чувствовать, что есть два вложенных массива, и это кажется грубым. Я надеюсь, вы понимаете меня, и мне просто нужно знать, есть ли другой путь или что на самом деле происходит.

Оставайтесь дома, ребята! Заранее спасибо.

const objArray = [
    {key:1, value:10},
    {key:2, value:20},
    {key:3, value:30},
    {key:4, value:40}
];

const newArray = objArray.map(obj => {
    let _obj = {};
    _obj[obj.key] = obj.value;
    return _obj;
});

console.log(newArray);
//Array [Object { 1: 10 }, Object { 2: 20 }, Object { 3: 30 }, Object { 4: 40 }]

Ответы [ 4 ]

0 голосов
/ 30 марта 2020

Вот вариант с методом уменьшения:

const objArray = [
  {key:1, value:10},
  {key:2, value:20},
  {key:3, value:30},
  {key:4, value:40}
];

const newArray = objArray.reduce((acc, rec) => { return {...acc, [rec.key]: rec.value} }, []);

console.log(JSON.stringify(newArray))

// {"1":10,"2":20,"3":30,"4":40}
0 голосов
/ 29 марта 2020

Мне просто нужно знать, есть ли другой путь или что на самом деле происходит.

Когда вы делаете:

_obj[obj.key] = obj.value;

... вы установка ключа / свойства объекта _obj для хранения определенного значения. В этом случае ключом, который вы устанавливаете, является значение obj.key, а значение obj.value. Значения obj.key и obj.value изменяются в зависимости от того, на каком объекте вы выполняете итерацию в обратном вызове .map(). Например, если вы смотрите на первый объект в вашем массиве, obj.key будет 1, а obj.value будет 10. Таким образом, выполнение _obj[obj.key] = obj.value будет эквивалентно _obj[1] = 10, в результате чего ключ 1 будет иметь значение 10 для объекта _obj:

{
  1: 10
}

Этот процесс происходит для каждый объект в вашем массиве.

Что касается другого подхода, вы можете использовать имя вычисляемого свойства , введенное в ES6 с деструктурирующим присваиванием , чтобы вернуть литерал объекта со свойством ключа в качестве ключа для литерал нового объекта, свойство value и фактическое значение для нового объекта:

const objArray = [
  {key:1, value:10},
  {key:2, value:20},
  {key:3, value:30},
  {key:4, value:40}
];

const newArray = objArray.map(({key, value}) => ({[key]: value}));
console.log(newArray);
0 голосов
/ 29 марта 2020

Массив - это специальный объект, в котором все ключи должны быть номерами. Массив имеет некоторый предопределенный метод, который предназначен для итерации и выполнения аналогичных операций. Массив является линейным и реализует реализацию стека. Элементом массива может быть любой другой объект или массив.

Для понимания:

const object = {
  1: "something",
  2: "something2"
}
const object2 = {
  "1_1": "something",
  "2_1": "something2"
}
// console.log(object[1])
// console.log(object[2])
// console.log(object2["2_1"]) // Key string
// console.log(object2["1_1"])

// object.forEach(console.log) // Error


const array = ["something", "something2"]
const array2 = []
array2["1_1"] = "something"
array2["2_1"] = "something2"

console.log(array[0]) // index start with 0, default
console.log(array[1])
console.log(array2["2_1"]) // Key string
console.log(array2["1_1"]) // Works

array.forEach(console.log) // No error, something 0 [ 'something', 'something2' ] something2 1 [ 'something', 'something2' ]
array2.forEach(console.log) // No error, // No output
0 голосов
/ 29 марта 2020

В javascript, как и java, все, что не является примитивом , является объектом. Массивы на самом деле являются объектами, в которые просто добавлены некоторые служебные функции, такие как атрибут длины и .map. Чтобы получить доступ к свойству, вы можете либо сделать obj.prop, либо использовать произвольную строку, например, словари python, например obj["prop"].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...