更高级的 JavaScript key/value 对?
More advanced JavaScript key/value pairs?
很抱歉,如果这只是常识,但我正在考虑一种比
更高级的从数组中获取对象的方法
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);
}
});
现在我不确定这是否真的是我应该一直做的,或者这是否是常识,但老实说,我最近才发现删除关键字
所以我想问题是,这是进行 key/value 配对(几乎是数组类型)的有效方法吗?
为什么人们在制作第 3 方插件时不直接使用它而不使用数组,或者为什么我以前没见过它? (是不是慢很多?分机)
我现在有点忙,但前提是没有人向我提及这已经被大量记录(或者我的想法是错误的),我会做一些实验然后 post 回来.
I'm sorry if this is just common knowledge but I was thinking of a more advanced way of getting an object from an array then
for(var i = 0; i < array.length; i++)
{
if(i.id == idfromfunction)
{
dostuff();
}
}
你说得对,还有更"advanced"的方法。这是Array.prototype.find
var item = array.find(function(x) { return x.id === idFromFunction });
if (item === undefined)
doSomething();
else
doStuff(item);
Array.prototype.find
将遍历数组,每个项目调用一次提供的过程。如果过程 returns true
,则返回该项目并终止迭代。如果程序从不 returns true
,
结果值将是 undefined
.
使用你的最后一段代码,看起来你已经可以自己 discovering/implementing 这个函数了。干得好。
很抱歉,如果这只是常识,但我正在考虑一种比
更高级的从数组中获取对象的方法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);
}
});
现在我不确定这是否真的是我应该一直做的,或者这是否是常识,但老实说,我最近才发现删除关键字
所以我想问题是,这是进行 key/value 配对(几乎是数组类型)的有效方法吗?
为什么人们在制作第 3 方插件时不直接使用它而不使用数组,或者为什么我以前没见过它? (是不是慢很多?分机)
我现在有点忙,但前提是没有人向我提及这已经被大量记录(或者我的想法是错误的),我会做一些实验然后 post 回来.
I'm sorry if this is just common knowledge but I was thinking of a more advanced way of getting an object from an array then
for(var i = 0; i < array.length; i++)
{
if(i.id == idfromfunction)
{
dostuff();
}
}
你说得对,还有更"advanced"的方法。这是Array.prototype.find
var item = array.find(function(x) { return x.id === idFromFunction });
if (item === undefined)
doSomething();
else
doStuff(item);
Array.prototype.find
将遍历数组,每个项目调用一次提供的过程。如果过程 returns true
,则返回该项目并终止迭代。如果程序从不 returns true
,
结果值将是 undefined
.
使用你的最后一段代码,看起来你已经可以自己 discovering/implementing 这个函数了。干得好。