我有嵌套数组的复杂数组。
例如,如果我想从最后一个数组获取数据,那么我必须写:
Stuff
或partners[0].products[0].campaigns[0].nameCampaign
或.type
等。
有可能吗?
@EDIT
这是.price
的一部分:
console.log(JSON.stringify(partners, 0, 4));
答案 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)
var CAMPAIGN_NAME_PATH = ['partners', 0, 'products', 0, 'campaigns', 0, 'nameCampaig'];
var campaignName = _.get(JSONObject, CAMPAIGN_NAME_PATH, 'optionalDefaultCampaignName');
或者您可以尝试使用flatten,flattenDeep和flattenDepth,然后在访问之前重新排列JSON对象结构(请注意,这三种方法仅适用于数组,而不是键 - 价值对象)。