IndexOf和.splice()等效于对象
IndexOf and .splice() equivalent for objects
我有以下代码(jsfiddle):
var obj = {
x: 48,
y: 13
};
var main = [{
x: 8,
y: 3
}, {
x: 82,
y: 31
}, {
x: 48,
y: 13
}, {
x: 28,
y: 31
}];
var result = $.grep(main, function (e) {
return ((e.x == obj.x) && (e.y == obj.y));
});
var index = main.indexOf(obj);
if (result.length > 0)
main.splice(index, 1);
我知道这是一组物体。除了自己迭代它来检索索引然后拼接它之外,还有其他方法吗?
您实际上已经有了索引。$.grep()
方法的回调将索引作为第二个参数。所以你可以写这样的东西:
var obj = {
x: 48,
y: 13
};
var main = [{
x: 8,
y: 3
}, {
x: 82,
y: 31
}, {
x: 48,
y: 13
}, {
x: 28,
y: 31
}];
var index;
var result = $.grep(main, function (e, i) {
var res = (e.x == obj.x) && (e.y == obj.y);
if (res) {
index = i;
}
return res;
});
if (result.length > 0)
main.splice(index, 1);
如果出现多次,这将为您提供最后一个索引。如果你想要第一个索引(就像你在数组上使用indexOf
一样),你需要确保一旦设置了index
,它就不会被覆盖。
FIDDLE
var index = main.indexOf(obj);
indexOf
Array方法确实通过相等进行比较,这对于对象来说意味着它们的身份。只有当你的main
阵列像:时,你才能使用它
var main = [{x:8,y:3}, {x:82,y:31}, obj, {x:28,y:31}];
// ^^^
除了自己迭代来检索索引之外,还有其他方法吗?
如果你搜索的东西不是相等的,那么不是。当然,你可以为此编写一个特殊的辅助函数(就像indexOf
是一个)。不要害怕这样做(而且你不会错过原生的替代品)!
显然,您要查找的是一个关联数组。您可以将主数组重写为"关联数组"(实际上是一个对象):
var main = {
"8": {
"3": {...}
},
"82": {
"31": {...}
},
// etc.
};
那么你要找的只是:
main[obj.x][obj.y]
相关文章:
- 块相对于父对象的位置
- javascript对象属性应用于所有对象
- _.assign 仅当属性存在于目标对象中时
- Javascript 原型 - 不仅适用于实例对象
- 如何覆盖 Javascript 中的方法并将其应用于原始对象,而不是子对象
- snap.svg:将函数应用于许多对象
- 三.js 单击时获取相对于此值的对象(对象都在数组中)
- 删除开头的双引号&结束于JSON对象/字符串或Java脚本变量
- Javascript/Jquery-.every()等价于对对象进行操作
- 应用于图像对象的onclick方法导致向“;否”;页
- 为什么String.prototype会记录它's对象类似于标准对象,而Array.prototype记录它
- (three.js)-任何动态创建纹理并应用于网格对象的方法
- 获取图像相对于父对象的位置,同时考虑垂直偏移
- 将焦点应用于一个对象,10秒钟后将焦点应用到另一个对象
- Javascript/html5 2d Canvas Context -获取相对于Canvas的X, Y(相对于转换对象
- 如何更改此DEBUG代码以对应于窗口对象
- extjs网格不显示预期的数据,即使存储,列存在于网格对象
- 消息事件处理程序是否存在于窗口对象中
- 将变量添加到函数作用域/闭包中.函数相当于窗口对象
- 比较对象并只获取存在于所有对象中的对象