gpt4 book ai didi

javascript - 使 Javascript 数组元素可以通过附加键访问

转载 作者:行者123 更新时间:2023-11-28 01:28:57 25 4
gpt4 key购买 nike

很多时候(尤其是在 MVC 场景中)我必须使用数组来存储对象,但我还必须通过存储对象的属性来访问对象。然后我可能会迭代该数组,但我猜想(猜想是因为我对 Javascript 性能知之甚少)这对于数百个对象和数百次迭代来说已经很慢了。然后我建立一个索引,如下所示:

var arr = [];
var index = {};

var o1 = {id: 0, key: "A", data: "X"};
var o2 = {id: 1, key: "B", data: "Y"};

arr.push(o1);
arr.push(o2);
index[o1.key] = o1;
index[o2.key] = o2;

var lookupKey = "B";

// modify object
arr[1].data = "Z";

// get data for key "B" - alerts "Z"
alert(index[lookupKey].data);

( http://jsfiddle.net/timvdh/WT53x/3/ )

当然我必须建立和维护这个索引...我想知道是否有更好的方法?

我猜有一个库包含“SortedDictionaries”(.NET 中此类通用集合的名称) - 我想知道的是。然而,我也在使用专门的数组(例如,knockout 的 observableArray),并且我也需要一种方法来索引该数组。或者我需要知道我对索引所做的事情根本不值得。

最佳答案

听起来您正朝着正确的方向前进,但是您可以使用一些技巧来获得所需的答案,而无需构建单独的索引。

var arr = [];

arr.push({id: 0, key: "A", data: "X"});
arr.push({id: 1, key: "B", data: "Y"});

arr[1].data = 'Z';

var lookup = 'B';

现在您可以在这里使用filter数组上的 method* 来提取具有正确查找值的对象。

var result = arr.filter(function(el) {
return el.key === lookup;
});

请注意,results 将是找到的所有匹配项的数组。因此,如果数组中只有一个元素:

console.log(result[0].data) // Z

让我们向数组添加另一个对象并重新运行过滤器:

arr.push({id: 2, key: "B", data: "E"});

并对结果使用循环:

for (var i = 0, l = result.length; i < l; i++) {
console.log(result[i].data); // Z and E
}

Fiddle

最终您可能希望将其封装到一个函数中,如下所示:

function findThings(prop, value) {
return arr.filter(function(el) {
return el[prop] === value;
});
}

console.log(findThings('key', 'B')) // an array of two objects that you can loop over

* 请注意,对于较旧的浏览器,您需要使用 filter polyfill .

关于javascript - 使 Javascript 数组元素可以通过附加键访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22378487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com