Как получить значение из свойства индекса в JavaScript? - PullRequest
0 голосов
/ 29 августа 2018

Вот мой код:

const array1 = [{a: 'abc', b: 'cd'}, {a: 'abc', b: 'xyz'}, {a: 'abc', 
b: 'mno'}];
let obj = array1.reduce(function(result, item, index){
    result[index] = item
  return result;
}, {});

let dealId = 123;
let value = {};
let array2 = [];
for (var property in obj) {
   value[dealId] = array2.push(obj[property]);
}
console.log(value)

Выход этого Object { 123: 3 }

Но я хочу, и это то, чего я ожидал. Object { 123: [{a: 'abc', b: 'cd'}, {a: 'abc', b: 'xyz'}, {a: 'abc', b: 'mno'}] }

Почему я получаю 3 вместо массива? Как получить массив?

Ответы [ 5 ]

0 голосов
/ 29 августа 2018

Назначьте вашему новому свойству obj (id) запрошенный массив:

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false">
<div class="snippet-code">
<pre class="snippet-code-js lang-js prettyprint-override"><code>    let arr = [{a: 'abc', b: 'cd'}, {a: 'abc', b: 'xyz'}, {a: 'abc', 
    b: 'mno'}];
    let newObj = {};
    let id = 123;

    newObj[id] = arr;
    console.log(newObj);
0 голосов
/ 29 августа 2018

const array1 = [{a: 'abc', b: 'cd'}, {a: 'abc', b: 'xyz'}, {a: 'abc', 
b: 'mno'}];
let obj = array1.reduce(function(result, item, index){
    result[index] = item
  return result;
}, {});

let dealId = 123;
let value = {};
let array2 = [];
for (var property in obj) {
   array2.push(obj[property]);
}

value[dealId] = array2;

console.log(value)
0 голосов
/ 29 августа 2018

Array.prototype.push возвращает новую длину массива, а не сам массив. Ваш цикл присваивает значения 1, 2 и 3 одному и тому же value[dealId].

Вместо этого вы можете переместить назначение за пределы цикла:

for (var property in obj) {
   array2.push(obj[property]);
}
value[dealId] = array2;

Или вы можете просто использовать Object.values:

value[dealId] = Object.values(obj);

Но учтите, что в этом списке нет унаследованных свойств.

0 голосов
/ 29 августа 2018

сначала нужно добавить в aaray, затем создать объект

 

const array1 = [{a: 'abc', b: 'cd'}, {a: 'abc', b: 'xyz'}, {a: 'abc', b: 'mno'}];
let obj = array1.reduce(function(result, item, index){
    result[index] = item
  return result;
}, {});

let dealId = 123;
let value = {};
let array2 = [];
for (var property in obj) {
  array2.push(obj[property]);
}
 value[dealId] = array2;
console.log(value);
0 голосов
/ 29 августа 2018

Почему бы не построить новый объект с одним ключом и указанным массивом в качестве значения?

Для объекта используйте имя вычисляемого свойства .

const
    array = [{ a: 'abc', b: 'cd' }, { a: 'abc', b: 'xyz' }, { a: 'abc', b: 'mno' }],
    key = 123,
    object = { [key]: array };

console.log(object);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...