修改对象文字数据并将其包装在数组中



我有一个对象文字或具有数据的json文件,我想要的是在数组中包装SMBPremium和最大数据,以便我可以通过访问其索引来定位。如何将我的对象文字修改为数组,以便我可以针对SmbPremium and Max。有这样的人。

productMap['TEC0'][1].productName;

这是我的JSON

var productMap = {
    "TEC0": { 
      "SMBPremium"  : {
                "productName": "Wilson",
                "panelClass": "WilsonClass",
                "fullinfoClass": "Wilsonfull",
                "productPageLink": "",
                "panelPageLinkGA": "",
                "fullPageLinkGA": "",
                "notifLinkDanger" : {
                    "linkPrimary" : "",
                    "linkSecondary" : ""
                    },
                "notifLinkRed" : {
                    "linkPrimary" : "",
                    "linkSecondary" : ""
                    },
                "notifLinkInfo" : "",
                "notifLinkWarning" : "",
                "notifLinkSuccess" : ""
        },
        "MAX": {
                "productName": "Spalding",
                "panelClass": "spalding",
                "fullinfoClass": "spalding",
                "productPageLink": "",
                "panelPageLinkGA": "",
                "fullPageLinkGA": "",
                "notifLinkDanger" : {
                    "linkPrimary" : "",
                    "linkSecondary" : ""
                },
                "notifLinkRed" : {
                    "linkPrimary" : "",
                    "linkSecondary" : ""
                },
                "notifLinkInfo" : "",
                "notifLinkWarning" : "",
                "notifLinkSuccess" : ""
        }
    }
};

带有 array.map

的tranform
productMap2 = {};
productMap2.TEC0 = Object.keys(productMap['TEC0']).map(key => productMap['TEC0'][key]);

然后,您可以访问每个元素的productName 属性:

productMap2.TEC0[1].productName

您可以按照自己的意愿重新创建对象的productmap:

// Every object is a map:
var tec0 = productMap['TEC0'];
var keys = Object.keys(tec0);
var array = [];
for(var i=0; i<keys.length; i++) {
    var key = keys[i];
    var value = tec0[key];
    array.push(value);
}
var newProductMap = {'TEC0': array};
alert(newProductMap['TEC0'][1].productName);

注意:Faly的答案更加优雅。只需在浏览器兼容箭头功能时小心(即不支持)。

Ammar答案的同上,IE不支持。

使用object.values()方法:

productMap["TEC0"] = Object.values(productMap["TEC0"]);

尝试此

index = 1
productMap['TEC0'][Object.keys(productMap['TEC0'])[index]].productName; 

说明

  • productmap ['tec0']是json对象

  • object.keys(productmap ['tec0']) - 将返回json对象键作为数组。在这样的示例中

  • object.keys(productmap ['tec0'])[index] - 将返回基于密钥名称
    在索引上传递。

  • productmap ['tec0'] [key_name] - 将基于json对象
    key_name从以前的状态获得。

您可以将项目映射到通缉键数组的索引。

var productMap = { TEC0: { SMBPremium: { productName: "Wilson", panelClass: "WilsonClass", fullinfoClass: "Wilsonfull", productPageLink: "", panelPageLinkGA: "", fullPageLinkGA: "", notifLinkDanger: { linkPrimary: "", linkSecondary: "" }, notifLinkRed: { linkPrimary: "", linkSecondary: "" }, notifLinkInfo: "", notifLinkWarning: "", notifLinkSuccess: "" }, MAX: { productName: "Spalding", panelClass: "spalding", fullinfoClass: "spalding", productPageLink: "", panelPageLinkGA: "", fullPageLinkGA: "", notifLinkDanger: { linkPrimary: "", linkSecondary: "" }, notifLinkRed: { linkPrimary: "", linkSecondary: "" }, notifLinkInfo: "", notifLinkWarning: "", notifLinkSuccess: "" } } },
    keys = ['SMBPremium', 'MAX'];
    
keys.forEach((k, i) => productMap.TEC0[i] = productMap.TEC0[k]);
console.log(productMap['TEC0'][0].productName);

最新更新