繁体   English   中英

如何使用不同的对象在javascript中创建对象数组?

[英]how to make array of objects in javascript using different objects?

我正在尝试制作一个包含对象的数组。实际上我需要将对象推入数组中,但是在我有一些条件之前

  • 我有一个数组(一个是对象的数组)。我需要首先删除所有具有“隐藏”属性的对象:是的 。我能够像这样

  • 我有另一个b (b是对象数组)。在其中我需要使用参数fieldNameOrPath来收集值。从第一个数组中删除的具有隐藏的值:true不需要在第二个数组中考虑。不检查或者我们也可以使用fieldNameOrPath删除从第一个数组中删除的那些

我试图获取值试图获得预期的结果,但我未能获得

   var deletedfieldNameOrPath=[ ];
    for (var i = 0; i < a.length; i++) {
        if (a[i].hidden) {
            deletedfieldNameOrPath.push(a[i].fieldNameOrPath)
            delete a[i]
        }
    }
console.log(a);
console.log(deletedfieldNameOrPath);

var objectarray = []
for (var i = 0; i < b.length; i++) {
    for (var k = 0; k < b[i].columns.length; k++) {
        var obj = {};
        if (deletedfieldNameOrPath.indexOf(b[i].columns.fieldNameOrPath) == -1) {
            obj.b[i].columns.fieldNameOrPath = b[i].columns.value;
        }
        objectarray.push(obj)

    }

}

预期数组

 [{
    Type__c: "pqr",
    akritiv__So_Number__c: "a"
}, {
    Type__c: "Invoice",
    akritiv__So_Number__c: "-"
}, {
    Type__c: "inc",
    akritiv__So_Number__c: "c"
}, ]

这是小提琴http://jsfiddle.net/93m4wbh1/

没有理由从数组中删除元素。 尝试这个。

var a = [{
    "hidden": true,
        "fieldNameOrPath": "Name",

}, {
    "hidden": true,
        "fieldNameOrPath": "akritiv__Account__r.Name",
}, {
    "hidden": false,
        "fieldNameOrPath": "Type__c",
}, {
    "hidden": false,
        "fieldNameOrPath": "akritiv__So_Number__c",
}];

var collectNameOrPath =
    a.filter(function(o) { return !o.hidden })
     .map(function(o) { return o.fieldNameOrPath });


console.log(collectNameOrPath);

var b = [{
    "columns": [{
        "value": "a0RK0000002l3AB",
            "fieldNameOrPath": "Name"
    }, {
        "value": "Sun Life Financial",
            "fieldNameOrPath": "akritiv__Account__r.Name"
    }, {
        "value": "pqr",
            "fieldNameOrPath": "Type__c"
    }, {
        "value": "a",
            "fieldNameOrPath": "akritiv__So_Number__c"
    }]
}, {
    "columns": [{
        "value": "a0RK0000002l3ac",
            "fieldNameOrPath": "Name"
    }, {
        "value": "Scottish Power",
            "fieldNameOrPath": "akritiv__Account__r.Name"
    }, {
        "value": "Invoice",
            "fieldNameOrPath": "Type__c"
    }, {
        "value": "-",
            "fieldNameOrPath": "akritiv__So_Number__c"
    }]
}, {
    "columns": [{
        "value": "a0RK0000002l3aC",
            "fieldNameOrPath": "Name"
    }, {
        "value": "FirstEnergy",
            "fieldNameOrPath": "akritiv__Account__r.Name"
    }, {
        "value": "inc",
            "fieldNameOrPath": "Type__c"
    }, {
        "value": "c",
            "fieldNameOrPath": "akritiv__So_Number__c"
    }]
}]

var nameOrPathValues = b.map(function(o) {
  var result = {};
  o.columns.forEach(function(c) {
    result[c.fieldNameOrPath] = c.value;
  });
  return result;
});

console.log(nameOrPathValues);

var objectarray = nameOrPathValues.map(function(o) {
  var result = {};
  collectNameOrPath.forEach(function(name) {
    result[name] = o[name];
  });
  return result;
});

console.log(objectarray);

你非常接近我想要的。

我做了一些小改动:

  • 首先,我使用拼接而不是删除来确保从数组中删除对象,而不是留空记录。
  • 然后,我确保为每个列(而不是每个列中的每个记录)创建并推送对象。
  • 最后,我修复了一个小错误,该错误避免了使用[]将值添加到对象中(就像在数组上一样)。

 var a = [{ "hidden": true, "fieldNameOrPath": "Name", }, { "hidden": true, "fieldNameOrPath": "akritiv__Account__r.Name", }, { "hidden": false, "fieldNameOrPath": "Type__c", }, { "hidden": false, "fieldNameOrPath": "akritiv__So_Number__c", }]; var deletedfieldNameOrPath = []; var collectNameOrPath = []; for (var i = 0; i < a.length; i) { if (a[i].hidden) { deletedfieldNameOrPath.push(a[i].fieldNameOrPath) a.splice(i, 1); continue; } else { collectNameOrPath.push(a[i].fieldNameOrPath); } i ++; } console.log(a); console.log(deletedfieldNameOrPath); [{ Type__c: "pqr", akritiv__So_Number__c: "a" }, { Type__c: "Invoice", akritiv__So_Number__c: "-" }, { Type__c: "inc", akritiv__So_Number__c: "c" }, ] var b = [{ "columns": [{ "value": "a0RK0000002l3AB", "fieldNameOrPath": "Name" }, { "value": "Sun Life Financial", "fieldNameOrPath": "akritiv__Account__r.Name" }, { "value": "pqr", "fieldNameOrPath": "Type__c" }, { "value": "a", "fieldNameOrPath": "akritiv__So_Number__c" }] }, { "columns": [{ "value": "a0RK0000002l3ac", "fieldNameOrPath": "Name" }, { "value": "Scottish Power", "fieldNameOrPath": "akritiv__Account__r.Name" }, { "value": "Invoice", "fieldNameOrPath": "Type__c" }, { "value": "-", "fieldNameOrPath": "akritiv__So_Number__c" }] }, { "columns": [{ "value": "a0RK0000002l3aC", "fieldNameOrPath": "Name" }, { "value": "FirstEnergy", "fieldNameOrPath": "akritiv__Account__r.Name" }, { "value": "inc", "fieldNameOrPath": "Type__c" }, { "value": "c", "fieldNameOrPath": "akritiv__So_Number__c" }] }] var objectarray = [] for (var i = 0; i < b.length; i++) { var obj = {}; for (var k = 0; k < b[i].columns.length; k++) { if (deletedfieldNameOrPath.indexOf(b[i].columns[k].fieldNameOrPath) == -1) { obj[b[i].columns[k].fieldNameOrPath] = b[i].columns[k].value; } } objectarray.push(obj) } console.log(objectarray); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM