如何遍历对象数组并分离嵌套的数组数组
how to loop through array of objects and separate nested array of arrays
我有 JSON,目前用于 kendo-ui 图表。我需要将数据用于网格,因此我需要将数组的嵌套数据数组分离到自己的对象中。 Javascript 或 linq.js 都可以。这是我开始的 JSON。
customSeries = [{
"name": "Chantal Hamlet - Green Castle Homes",
"subId": "10223",
"bldId": "13551",
"data": [
[179900, 1386],
[214900, 1440],
[194500, 1496],
[217900, 1504],
[189900, 1542],
[184900, 1546],
[192500, 1570]
],
}, {
"name": "Ella Sea Condos - Sahnow Construction",
"subId": "9761",
"bldId": "27380",
"data": [
[199900, 1500]
]
}, {
"style": "smooth",
"color": "blue",
"data": [
[20000, 200],
[40000, 400],
[40000, 400]
],
"name": "Subject Property"
}]
我需要得到 2 个单独的数组。
第一个数组
Array1 = [{
"name": "Chantal Hamlet - Green Castle Homes",
"subId": "10223",
"bldId": "13551"
}, {
"name": "Ella Sea Condos - Sahnow Construction",
"subId": "9761",
"bldId": "27380"
}, {
"style": "smooth",
"color": "blue",
"name": "Subject Property"
}]
第二个数组
Array2 = [
{
"data": [
[179900, 1386],
[214900, 1440],
[194500, 1496],
[217900, 1504],
[189900, 1542],
[184900, 1546],
[192500, 1570]
]
}, {
"data": [
[199900, 1500]
]
}, {
"data": [
[20000, 200],
[40000, 400],
[40000, 400]
]
}
]
您可能想研究使用 lodash,它有很多用于操作数组和执行 MapReduce 函数的强大函数。
您可以使用 Array.prototype.map
方法。
var Array1 = customSeries.map(function(el) {
return {
name: el.name,
subId: el.subId,
bldId: el.bldId
};
});
var Array2 = customSeries.map(function(el) {
return {
data: el.data
};
});
更新:
当 customSeries
中的元素除 data
.
外没有固定键时,上述代码不起作用
如果您使用 lodash
,您可以这样做:
var Array1 = customSeries.map(function(el) {
return _.omit(el, 'data');
});
var Array2 = customSeries.map(function(el) {
return _.pick(el, 'data');
});
根据数组的长度,您可能希望一次完成此操作。在这里使用 linq.js 对此没有太大帮助,它只会增加开销而没有实际好处。
如果您不介意删除原始数据,您可以同时处理它们,方法是遍历每个项目并将 data
数组的副本添加到第二个数组,同时从中删除数据项目。
var array1 = data,
array2 = [];
array1.forEach(function (item) {
array2.push({
data: item.data
});
delete item.data;
});
如果您想保留原始数据,则必须在处理每个项目时克隆它们。
var array1 = [],
array2 = [];
data.forEach(function (item) {
var noData = yourCloneMethod(item); // replace call with preferred clone method
delete noData.data;
array1.push(noData);
array2.push({
data: item.data
});
});
我有 JSON,目前用于 kendo-ui 图表。我需要将数据用于网格,因此我需要将数组的嵌套数据数组分离到自己的对象中。 Javascript 或 linq.js 都可以。这是我开始的 JSON。
customSeries = [{
"name": "Chantal Hamlet - Green Castle Homes",
"subId": "10223",
"bldId": "13551",
"data": [
[179900, 1386],
[214900, 1440],
[194500, 1496],
[217900, 1504],
[189900, 1542],
[184900, 1546],
[192500, 1570]
],
}, {
"name": "Ella Sea Condos - Sahnow Construction",
"subId": "9761",
"bldId": "27380",
"data": [
[199900, 1500]
]
}, {
"style": "smooth",
"color": "blue",
"data": [
[20000, 200],
[40000, 400],
[40000, 400]
],
"name": "Subject Property"
}]
我需要得到 2 个单独的数组。
第一个数组
Array1 = [{
"name": "Chantal Hamlet - Green Castle Homes",
"subId": "10223",
"bldId": "13551"
}, {
"name": "Ella Sea Condos - Sahnow Construction",
"subId": "9761",
"bldId": "27380"
}, {
"style": "smooth",
"color": "blue",
"name": "Subject Property"
}]
第二个数组
Array2 = [
{
"data": [
[179900, 1386],
[214900, 1440],
[194500, 1496],
[217900, 1504],
[189900, 1542],
[184900, 1546],
[192500, 1570]
]
}, {
"data": [
[199900, 1500]
]
}, {
"data": [
[20000, 200],
[40000, 400],
[40000, 400]
]
}
]
您可能想研究使用 lodash,它有很多用于操作数组和执行 MapReduce 函数的强大函数。
您可以使用 Array.prototype.map
方法。
var Array1 = customSeries.map(function(el) {
return {
name: el.name,
subId: el.subId,
bldId: el.bldId
};
});
var Array2 = customSeries.map(function(el) {
return {
data: el.data
};
});
更新:
当 customSeries
中的元素除 data
.
如果您使用 lodash
,您可以这样做:
var Array1 = customSeries.map(function(el) {
return _.omit(el, 'data');
});
var Array2 = customSeries.map(function(el) {
return _.pick(el, 'data');
});
根据数组的长度,您可能希望一次完成此操作。在这里使用 linq.js 对此没有太大帮助,它只会增加开销而没有实际好处。
如果您不介意删除原始数据,您可以同时处理它们,方法是遍历每个项目并将 data
数组的副本添加到第二个数组,同时从中删除数据项目。
var array1 = data,
array2 = [];
array1.forEach(function (item) {
array2.push({
data: item.data
});
delete item.data;
});
如果您想保留原始数据,则必须在处理每个项目时克隆它们。
var array1 = [],
array2 = [];
data.forEach(function (item) {
var noData = yourCloneMethod(item); // replace call with preferred clone method
delete noData.data;
array1.push(noData);
array2.push({
data: item.data
});
});