【问题标题】:Javascript Array indexOf by Key, Value problemsJavascript Array indexOf by Key, Value问题
【发布时间】:2013-01-19 18:15:32
【问题描述】:

我有一个存储在键中的数组,请参阅值格式:

{id: 0, data: mydata}

我还有一个与该 ID 对应的列表,用于删除文件和删除元素。
我遇到的问题是,当使用 Javascript 拼接函数(从数组中删除对象)时,它会更改索引值。

请参阅下面的 javascript:

function setupFileList(file, id){
    var list_of_file = document.getElementById("list_of_file");
    var name_of_file = file.name;
    var size_of_file = 0;
    var file_reader = new FileReader();
    file_reader.onload = function(e){
        var imgsrc = e.target.result;
        if(file){
            if(file.size > 1024 * 1024)
                size_of_file = (Math.round(file.size * 100 / (1024 * 1024)) / 100).toString() + "MB";
            else
                size_of_file = (Math.round(file.size * 100 / 1024) / 100).toString() + 'KB';
        }

        list_of_file.innerHTML += '<div id="file-'+id+'" class="filesUp"><img class="imgUp" src="' + imgsrc +'" width="100px" height="100px"><div class="progressUp"><span>' + name_of_file + ' / ' + size_of_file +'</span></div><a href="#" onclick="deleteUp(\''+id+'\')">Delete</a></div>';
    };
    file_reader.readAsDataURL(file);
};


function deleteUp(fid){
    var file_query = fileQuery.indexOf({id: fid});
    fileQuery.splice(file_query, 1);
    console.log(file_query);
}

【问题讨论】:

  • 更改索引值有什么问题?

标签: javascript arrays oop


【解决方案1】:

如何将对象存储在数组的对象 INSTEAD 中,这样键是固定的。

var fileQuery = {
   0: {
      id: 0,
      data: "some data"
   },
   1: {
      id: 1,
      data: "some more data"
   }
};

使用删除命令从对象中删除项目。
例如:

delete fileQuery[0];

ALSO indexOf 不比较数组中对象的属性,而是比较对象本身的引用。这意味着 array.indexOf 返回您作为 arg 提供的对象的索引,因此 {id: fid} 实际上是在该点创建一个新的唯一对象。不幸的是,indexOf 将始终返回 -1,因为它永远不会在数组中找到新创建的对象。

查找要查找的对象的索引的最佳方法是手动循环遍历数组并将所有元素的 id 属性与 fid 进行比较。恐怕在这种情况下array.indexOf 不会工作。

【讨论】:

  • 我将考虑更改为使用对象。我不知道 indexOf 所以再次感谢
猜你喜欢
  • 2011-03-19
  • 2022-12-02
  • 2014-08-20
  • 2022-07-28
  • 1970-01-01
  • 1970-01-01
  • 2022-12-02
  • 2021-11-17
  • 2022-11-14
相关资源
最近更新 更多