我有对象数组
[
{
"store_name":"ABC",
"store_iput": "123",
"store_Amount": "34"
},
{
"store_name":"XYZ",
"store_iput": "178",
"store_Amount": "346"
},
{
"store_name":"Tokr",
"store_iput": "3",
"store_Amount": "3"
}
]
所有三个对象都具有相同的键但具有不同的值。所以我只想要具有所有值的键。
{
"store_name":["ABC","XYZ","Tokr"],
"store_input":["123","178","3"],
"store_Amount":["34","346","3"]
}
如何获得此输出?
答案 0 :(得分:2)
let result={};
Object.keys(array[0]).forEach((key)=>{
result[key]=array.map((e)=> e[key]);
})
答案 1 :(得分:1)
如果我理解你,最简单的方法是将所有值存储在数组中。
例如,您可以使用for循环:
var i, store_name, store_input, store_Amount, array;
array = [
{
"store_name":"ABC",
"store_iput": "123",
"store_Amount": "34"
},
{
"store_name":"XYZ",
"store_iput": "178",
"store_Amount": "346"
},
{
"store_name":"Tokr",
"store_iput": "3",
"store_Amount": "3"
}
]
for(i=0;i<array.length;i++){
store_name[i]=array[i].store_name;
store_input[i]=array[i].store_name;
store_Amount[i]=array[i].store_name;
}
而且,您获得3个值数组 - 商店名称,商店输入和商店数量。
如果您决定将所有值存储在一个对象中,则可以执行以下操作而不是之前的for循环:
var obj = {
var store_name = [],
store_input= [],
store_Amount = [];
};
for(i=0;i<array.length;i++){
obj.store_name[i]=array[i].store_name;
obj.store_input[i]=array[i].store_name;
obj.store_Amount[i]=array[i].store_name;
}
答案 2 :(得分:0)
以下是一种方法:
var input = [
{ "store_name": "ABC", "store_iput": "123", "store_Amount": "34" },
{ "store_name": "XYZ", "store_iput": "178", "store_Amount": "346" },
{ "store_name": "Tokr", "store_iput": "3", "store_Amount": "3" }
];
var output = input.reduce(function(a, v) {
Object.keys(v).forEach(function(k) { (a[k] || (a[k] = [])).push(v[k]); });
return a;
}, {});
console.log(output);
&#13;
进一步阅读:
答案 3 :(得分:0)
您可以使用Object.keys
获取数组第一个对象中的键名称,然后使用Array#map
迭代此数组,以获取所有对象的映射值,并添加每个键的新对象的映射值:
var keys = Object.keys(objectArray[0]);
var combinedObject = {};
keys.forEach(function(key){
combinedObject[key] = objectArray.map(function(object){
return object[key];
});
})
答案 4 :(得分:0)
(function(arr) {
var rtn = {};
for (var i = 0; i < arr.length; i++) {
for (var k in arr[i]) {
if (rtn[k]) {
rtn[k].push(arr[i][k]);
} else {
rtn[k] = [arr[i][k]];
}
}
}
console.log(rtn)
return rtn;
})([{
"store_name": "ABC",
"store_iput": "123",
"store_Amount": "34"
}, {
"store_name": "XYZ",
"store_iput": "178",
"store_Amount": "346"
}, {
"store_name": "Tokr",
"store_iput": "3",
"store_Amount": "3"
}]);
答案 5 :(得分:0)
只需迭代数组项。对于每一个,获取其属性并迭代它们。使用该属性作为在结果中存储数据的关键字。如果密钥不存在,请创建一个新数组。
var data = [
{
"store_name":"ABC",
"store_iput": "123",
"store_Amount": "34"
},
{
"store_name":"XYZ",
"store_iput": "178",
"store_Amount": "346"
},
{
"store_name":"Tokr",
"store_iput": "3",
"store_Amount": "3"
}
];
console.log(data.reduce(function(result, item, index) {
Object.keys(item).forEach(function(key) {
if(!result.hasOwnProperty(key)) result[key] = new Array(data.length);
result[key][index] = item[key];
});
return result;
}, {}));
&#13;
答案 6 :(得分:0)
此问题有多种方法,如其他人所列。
如果您正在尝试使用ECMA5
语法解决问题,那么您可以使用reduce
。
示例:强>
var test =
[
{
"store_name":"ABC,",
"store_input": "123",
"store_Amount": "34"
},
{
"store_name":"XYZ",
"store_input": "178",
"store_Amount": "346"
},
{
"store_name":"Tokr",
"store_input": "3",
"store_Amount": "3"
}
];
let output = test.reduce((accumulator, current) => {
accumulator.store_name.push(current.store_name);
accumulator.store_input.push(current.store_input);
accumulator.store_Amount.push(current.store_Amount);
return accumulator
}, {
"store_name" : [],
"store_input" : [],
"store_Amount" : []
});
console.log(JSON.stringify(output));
<强>输出:强>
{
"store_name":["ABC,","XYZ","Tokr"],
"store_input":["123","178","3"],
"store_Amount":["34","346","3"]
}
基本上代码正在做的是它试图使用你的JSON对象test
并将其缩减为一个用键填充的单个对象; store_name
,store_input
和store_amount
。其中每个人都有一个阵列。请参阅reduce
的第二个参数。
然后,对于reduce
API中的每次迭代,代码将从current
检索适当的属性,并将其值推送到正确的数组中。它一直持续到迭代结束。
您可能还想查看reduce
的其他用法。
查看:强>
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
答案 7 :(得分:0)
如果您事先知道所有钥匙,那就很容易了。
var data = {
store_name:[],
store_input:[],
store_Amount:[]
}
items.forEach(function(el, i, arr){
data.store_name.push(el.store_name);
data.store_input.push(el.store_input);
data.store_Amount.push(el.store_Amount);
}
// or
items.forEach(function(el, i, arr){
Object.keys(el).forEach(function(key) {
data[key].push(el[key]);
});
}
如果您需要考虑新密钥或缺失密钥,那么您需要动态地将密钥添加到数据对象,然后发布进程以根据需要同步密钥数组长度
var data = {};
items.forEach(function(el, i, arr){
Object.keys(el).forEach(function(key) {
var arr = data[key] || [];
arr[i] = el[key]; // set to i to account for missing values
data[key] = arr;
}
}
// resize any short arrays
// fill in missing data?
Object.keys(data).forEach(function(key){
data[key].length = items.length;
});
答案 8 :(得分:0)
没有直接的方法来实现所需的输出。 你需要做一些计算来实现它。尝试使用以下内容:
var arr = [{"store_name":"ABC", "store_iput": "123", "store_Amount": "34" }, {"store_name":"XYZ", "store_iput": "178", "store_Amount": "346"}, {"store_name":"Tokr", "store_iput": "3", "store_Amount": "3"}]
var result= {};
for (var i = 0; i < arr.length; i++) {
var obj = arr[i];
for (var prop in obj) {
if (result[prop] == null) {
result[prop] = [];
result[prop].push(obj[prop]);
} else {
result[prop].push(obj[prop]);
}
}
}
for (var prop in result) {
// you need to use print statement to print key and value
}
答案 9 :(得分:0)
var final = {store_name: [], store_iput: [], store_Amount: []}
var original = [
{
"store_name":"ABC",
"store_iput": "123",
"store_Amount": "34"
},
{
"store_name":"XYZ",
"store_iput": "178",
"store_Amount": "346"
},
{
"store_name":"Tokr",
"store_iput": "3",
"store_Amount": "3"
}
]
original.forEach(function(x){
final.store_name.push(x.store_name)
final.store_iput.push(x.store_iput)
final.store_Amount.push(x.store_Amount)
})