如何在JavaScript中展平嵌套数组?

时间:2016-06-30 10:30:33

标签: javascript arrays

我有嵌套数组的复杂数组。 例如,如果我想从最后一个数组获取数据,那么我必须写: Stuffpartners[0].products[0].campaigns[0].nameCampaign.type等。

enter image description here

我想扁平这个阵列。这就是我的期望: enter image description here

有可能吗?

@EDIT 这是.price的一部分:

console.log(JSON.stringify(partners, 0, 4));

2 个答案:

答案 0 :(得分:2)

在普通的Javascript中,您可以使用一个数组,其中包含对所需项和数组的引用,并使用迭代递归方法来获取所需数组。

修改

要添加多个属性,可以将数组用于多个项目。

一个属性:

{ use: 'namePartner' }

多个属性:

{ use: ['nameCampains', 'type'] }



function iter(a, r, l) {
    if (Array.isArray(a)) {
        a.forEach(function (b) {
            var use = level[l].use,
                rr = JSON.parse(JSON.stringify(r));
            (Array.isArray(use) && use || [use]).forEach(function (c) {
                rr[c] = b[c];
            });
            iter(b[level[l].array], rr, l + 1);
        });
        return;
    }
    result.push(r);
}

var partners = [{ namePartner: 'Tesco', products: [{ nameProduct: 'New', campains: [{ nameCampains: 'Apple', type: 'appleType' }, { nameCampains: 'Lenovo', type: 'lenovoType' }] }] }, { namePartner: 'Eko', products: [{ nameProduct: 'Fresh', campains: [{ nameCampains: 'Asus', type: 'asusType' }, { nameCampains: 'Dell', type: 'dellType' }] }, { nameProduct: 'new', campains: [{ nameCampains: 'Samsung', type: 'samsungType' }] }] }],
    level = [{ use: 'namePartner', array: 'products' }, { use: 'nameProduct', array: 'campains' }, { use: ['nameCampains', 'type'] }],
    result = [];

iter(partners, {}, 0);
console.log(result);




答案 1 :(得分:-1)

您可以使用get中的lodash

var CAMPAIGN_NAME_PATH = ['partners', 0, 'products', 0, 'campaigns', 0, 'nameCampaig'];
var campaignName = _.get(JSONObject, CAMPAIGN_NAME_PATH, 'optionalDefaultCampaignName');

或者您可以尝试使用flattenflattenDeepflattenDepth,然后在访问之前重新排列JSON对象结构(请注意,这三种方法仅适用于数组,而不是键 - 价值对象)。