更高级的JavaScript键/值对?

时间:2016-06-08 03:31:57

标签: javascript key-value

对不起,如果这只是常识,但我想的是从数组中获取对象的更高级方法

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);
   }
});

现在我不确定这是不是我应该一直在做的事情,或者这是常识,但老实说我最近才发现删除关键字

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

为什么人们在制作第三方插件时不会使用这个而不是阵列?为什么以前我没见过它? (它慢得多吗?分机)

我现在有点忙,但是没有人提到我已经记录了很多文件(或者我的想法是错的),我会做一些实验并回复。

1 个答案:

答案 0 :(得分:3)

  

对不起,如果这只是常识,但我正在考虑从数组中获取对象的更高级方法

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

你是对的,有更多的&#34;高级&#34;办法。它是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

使用您的最后一段代码,看起来您正在自行发现/实现此功能。干得好。