javascript数组-对象转换一键,数组值单个对象
javascript array-object convert one key, array value single object
我有一个这样的对象:
[
{ "number": 12, "string": "hi"},
{ "number": 40, "string": "bye"}
]
我要:
{"number": [12, 40], "string": ["hi", "bye"]}
或者:
{"number": "12,40", "string": "hi,bye"}
您可以使用 Array.prototype.reduce():
The reduce()
method executes a reducer function (that you provide) on each member of the array resulting in a single output value.
连接字符串的解决方案:
var data = [
{ "number": 12, "string": "hi"},
{ "number": 40, "string": "bye"}
]
data = data.reduce((a,c)=>{
a.number = a.number + ',' +c.number;
a.string = a.string + ',' +c.string;
return a;
});
console.log(data);
数组解法:
var data = [
{ "number": 12, "string": "hi"},
{ "number": 40, "string": "bye"}
]
data = data.reduce((a,c)=>{
a.number.push(c.number);
a.string.push(c.string);
return a;
}, {number:[],string:[]});
console.log(data);
您可以使用 Array.reduce()
:
var arr = [
{ "number": 12, "string": "hi"},
{ "number": 40, "string": "bye"}
];
var res = arr.reduce((acc, item)=>{
if(acc.number && acc.string){
acc.number.push(item.number);
acc.string.push(item.string);
} else {
acc = {
number: [item.number],
string: [item.string]
}
}
return acc;
}, {});
console.log(res);
我是这样做的:
let array = [
{ "number": 12, "string": "hi"},
{ "number": 40, "string": "bye"}
];
let resultObject = {
numbers: [],
strings: []
}
for (let element of array) {
resultObject.numbers.push(element.number);
resultObject.strings.push(element.string);
}
console.log(resultObject);
希望对您有所帮助:)
您可以减少数组和对象的条目,并使用数组中的键收集所有值,而无需硬编码属性。
var array = [{ number: 12, string: "hi" }, { number: 40, string: "bye" }],
result = array.reduce(
(r, o) => Object.entries(o).reduce(
(s, [k, v]) => ((s[k] = s[k] || []).push(v), s),
r
),
{}
);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
您可以使用 lodash 的 _.mergeWith()
来组合它们:
const arr = [{ "number": 12, "string": "hi"}, { "number": 40, "string": "bye"}];
const result =_.mergeWith({}, ...arr, (s = [], o) => [...s, o]);
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
我有一个这样的对象:
[
{ "number": 12, "string": "hi"},
{ "number": 40, "string": "bye"}
]
我要:
{"number": [12, 40], "string": ["hi", "bye"]}
或者:
{"number": "12,40", "string": "hi,bye"}
您可以使用 Array.prototype.reduce():
The
reduce()
method executes a reducer function (that you provide) on each member of the array resulting in a single output value.
连接字符串的解决方案:
var data = [
{ "number": 12, "string": "hi"},
{ "number": 40, "string": "bye"}
]
data = data.reduce((a,c)=>{
a.number = a.number + ',' +c.number;
a.string = a.string + ',' +c.string;
return a;
});
console.log(data);
数组解法:
var data = [
{ "number": 12, "string": "hi"},
{ "number": 40, "string": "bye"}
]
data = data.reduce((a,c)=>{
a.number.push(c.number);
a.string.push(c.string);
return a;
}, {number:[],string:[]});
console.log(data);
您可以使用 Array.reduce()
:
var arr = [
{ "number": 12, "string": "hi"},
{ "number": 40, "string": "bye"}
];
var res = arr.reduce((acc, item)=>{
if(acc.number && acc.string){
acc.number.push(item.number);
acc.string.push(item.string);
} else {
acc = {
number: [item.number],
string: [item.string]
}
}
return acc;
}, {});
console.log(res);
我是这样做的:
let array = [
{ "number": 12, "string": "hi"},
{ "number": 40, "string": "bye"}
];
let resultObject = {
numbers: [],
strings: []
}
for (let element of array) {
resultObject.numbers.push(element.number);
resultObject.strings.push(element.string);
}
console.log(resultObject);
希望对您有所帮助:)
您可以减少数组和对象的条目,并使用数组中的键收集所有值,而无需硬编码属性。
var array = [{ number: 12, string: "hi" }, { number: 40, string: "bye" }],
result = array.reduce(
(r, o) => Object.entries(o).reduce(
(s, [k, v]) => ((s[k] = s[k] || []).push(v), s),
r
),
{}
);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
您可以使用 lodash 的 _.mergeWith()
来组合它们:
const arr = [{ "number": 12, "string": "hi"}, { "number": 40, "string": "bye"}];
const result =_.mergeWith({}, ...arr, (s = [], o) => [...s, o]);
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>