0

我有我目前用于 kendo-ui 图表的 JSON。我需要将数据用于网格,因此我需要将嵌套的数组数据数组分离到自己的对象中。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]
    ]
}

]

4

3 回答 3

2

你可以使用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');
});
于 2015-06-10T02:44:32.703 回答
2

根据数组的长度,您可能希望一次性完成此操作。在这里使用 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
    });
});
于 2015-06-10T05:33:13.933 回答
1

您可能想研究使用lodash,它有很多用于操作数组和执行 MapReduce 功能的强大功能。

于 2015-06-10T02:42:59.667 回答