很抱歉,如果这只是常识,但是我在想一种比数组更高级的方法来获取对象

for(var i = 0; i < array.length; i++)
{
    if(i.id == idfromfunction)
    {
      dostuff();
    }
}


所以我当时想的是做这样的事情

keyValuePairs = {};
function add(data,Id)
{
  keyValuePairs[Id] = data
}

function remove(Id)
{
  delete keyValuePairs[Id];
}


然后可以通过简单地检索数据

keyValuePairs[Id]


并使用(或使用此答案How to get all properties values of a Javascript Object (without knowing the keys)?的更新版本)遍历数据

for (var key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) {
    var val = obj[key];
    // use val
}
}


要么

function doLoop(callback)
{
    for (var key in obj) {
      if (Object.prototype.hasOwnProperty.call(obj, key)) {
      var val = obj[key];
        callback(val, key);
      }
    }
}


然后使用

doLoop(function(val, key){
   dostuff(val);
   or
   if(key == idfromfunction)
   {
      dostuff(val);
   }
});


现在我不确定这是否真的是我一直应该做的,还是这是常识,但是老实说我直到最近才发现有关delete关键字的信息

所以我想问题是,这是做键/值配对(几乎是数组的一种类型)的有效方法吗?

为什么人们在制作3rd party插件时不只使用它而不是数组?为什么我以前没有看过它? (慢很多吗?ext)

我现在有点忙,但没有人提及我已经对此进行了详尽记录(或者我的想法是错误的),我将做一些实验并发回。

最佳答案

如果这只是常识,我很抱歉,但是我当时正在考虑一种更高级的从数组中获取对象的方法


for(var i = 0; i < array.length; i++)
{
    if(i.id == idfromfunction)
    {
      dostuff();
    }
}


没错,还有一种更“先进”的方法。是Array.prototype.find

var item = array.find(function(x) { return x.id === idFromFunction });

if (item === undefined)
  doSomething();
else
  doStuff(item);


Array.prototype.find将遍历每个项调用一次提供的过程的数组。如果过程返回true,则返回该项目并终止迭代。如果该过程从不返回true
 结果值将为undefined

使用最后的代码,您似乎可以自行发现/实现此功能。辛苦了

07-28 07:13