Javascript对象数组 - 确定键值是否存在

时间:2015-11-17 18:52:04

标签: javascript jquery arrays object

我觉得自己像个白痴,但我无法想象这个。我正在创建一个对象数组:

var files = [];

for (var a = 0; a < data.Attachments.length; a++) {
    files.push({
        id: data.Attachments[a].ID,
        name: data.Attachments[a].Name, 
        size: data.Attachments[a].Size, 
        extension: data.Attachments[a].Extension 
    });                 
}       

我需要防止重复的条目被添加到数组中。在推送新行(包括this thread)之前,我尝试了多种方法来访问和检查现有ID,但没有任何效果。我敢肯定这是我失踪的一些小事。

这是文件数组的console.log在填充之后的样子(它循环遍历多个项目并为每个项目创建一个数组;一些项目没有附件): enter image description here

1 个答案:

答案 0 :(得分:1)

我相信你可以设置一个缓存对象来记录已经添加到数组中的内容。每次要将新项目推入数组之前,请检查该项目是否已记录在缓存对象中。如果是,继续下一个项目;否则将其推入阵列。

这样的事情:

var files = [];
var cache = {};

for (var a = 0; a < data.Attachments.length; a++) {
    if (!cache.hasOwnerProperty(data.Attachments[a].ID)) {
        files.push({
            id: data.Attachments[a].ID,
            name: data.Attachments[a].Name, 
            size: data.Attachments[a].Size, 
            extension: data.Attachments[a].Extension 
        });
        cache[data.Attachments[a].ID] = 0 // doesn't matter what value you assign
    }                 
}

希望这会有所帮助,让我知道它是否有效。