我有以下代码(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);
我知道这是一个对象数组。除了自己迭代它以检索索引然后拼接它之外还有其他方法吗?
答案 0 :(得分:1)
var index = main.indexOf(obj);
indexOf
Array method通过相等进行比较,对象表示它们的身份。只有在您的main
数组如下时才能使用它:
var main = [{x:8,y:3}, {x:82,y:31}, obj, {x:28,y:31}];
// ^^^
除了自己迭代以检索索引之外还有其他方法吗?
如果你搜索的东西不能通过相等比较,那么没有。当然,您可以为此目的编写一个特殊的辅助函数(就像indexOf
is one)。不要害怕这样做(而且你不会错过本地替代品)!
答案 1 :(得分: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 强>
答案 2 :(得分:0)
显然你正在寻找的是一个关联数组。您可以将主数组重写为“关联数组”(实际上是对象):
var main = {
"8": {
"3": {...}
},
"82": {
"31": {...}
},
// etc.
};
那么你要找的只是:
main[obj.x][obj.y]