基于具有新键和值的列表将新对象添加到数组

时间:2018-03-23 21:52:47

标签: javascript arrays object filter push

我有一个复选框,可以从列表中选择对象。为了使选择可识别,我想为所选对象添加一个新的键值,并使用所选值的标签。

我尝试了以下内容:

var checkCheckboxOnOff = [{"fieldName":"Categorie__c","picklistValue":"Techniek"},{"fieldName":"Regio__c","picklistValue":"Midden"}]

我通过checkCheckboxOnOff循环,从列表中选择对象:

opleidingfilter = serverList.filter(function(item) { return item[checkCheckboxOnOff[i].fieldName] == checkCheckboxOnOff[i].picklistValue});

在通过列表循环时,我向所选对象添加一个键和值,并将它们推送到过滤器数组中:

    opleidingfilter.forEach(function(n) {n.arrayPicklist = checkCheckboxOnOff.fieldName});
 Array.prototype.push.apply(filter,opleidingfilter[i]); 

我的问题是,当我选择一个对象两次时,我最终会使用最后一个Key和值更新所选对象。我的期望是两次选择1个对象后,最终得到2个不同的值。

实施例: 第一选:

[{"Id":"120"},{"Id":"121"}]

第二选择

[{"Id":"123"},{"Id":"121"}]

预期:

[{"Id":"120","arrayPicklist":"Categorie__c"},
{"Id":"121","arrayPicklist":"Categorie__c"},{"Id":"123","arrayPicklist":"Regio__c"},
{"Id":"121","arrayPicklist":"Regio__c"}]

当前结果

[{"Id":"120","arrayPicklist":"Categorie__c"},
    {"Id":"121","arrayPicklist":"Regio__c"},{"Id":"123","arrayPicklist":"Regio__c"},
    {"Id":"121","arrayPicklist":"Regio__c"}]

似乎未定义小提琴中的值,请参阅:https://jsfiddle.net/Lcg1qca3/18/

1 个答案:

答案 0 :(得分:0)

你的问题在

n.arrayPicklist = checkCheckboxOnOff.fieldName

您正在尝试访问数组上的fieldname属性,而不是checkCheckboxOnOff数组中的索引。

用此

替换该行
opleidingfilter.forEach(function(n,i) {n.arrayPicklist = checkCheckboxOnOff[i].fieldName});

这样您就可以访问迭代器中的index属性,并可以访问checkCheckboxOnOff数组中的每个项目。