![](/img/trans.png)
[英]How to get the property value of an object using index in javascript?
[英]How to get value from index property in javascript?
這是我的代碼:
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而不是數組? 如何獲得數組?
為什么不使用單個鍵並將給定數組作為值來構建新對象?
對於對象,請使用計算出的屬性名稱 。
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; }
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);
但是請注意,這沒有列出繼承的屬性。
您需要先添加到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);
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)
為您的新obj屬性(id)分配所需的數組:
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.