Javascript 对象的IndexOf和.splice()等效项

Javascript 对象的IndexOf和.splice()等效项,javascript,jquery,Javascript,Jquery,我有以下代码(): 我知道这是一个物体阵列。除了自己迭代检索索引,然后拼接索引,还有其他方法吗 通过相等进行比较,这对于对象意味着它们的同一性。只有当main数组如下时,才能使用它: var main = [{x:8,y:3}, {x:82,y:31}, obj, {x:28,y:31}]; // ^^^ 除了自己迭代检索索引之外,还有其他方法吗 如果你搜索的东西不是相等的,那么不是。当然你可以为此编写一个特殊的帮助函数(就像)

我有以下代码():

我知道这是一个物体阵列。除了自己迭代检索索引,然后拼接索引,还有其他方法吗

通过相等进行比较,这对于对象意味着它们的同一性。只有当
main
数组如下时,才能使用它:

var main = [{x:8,y:3}, {x:82,y:31}, obj, {x:28,y:31}];
//                                  ^^^
除了自己迭代检索索引之外,还有其他方法吗


如果你搜索的东西不是相等的,那么不是。当然你可以为此编写一个特殊的帮助函数(就像)。不要害怕这样做(而且你不会错过一个本地的选择)

实际上你已经有了索引。
$.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
后,它不会被覆盖


显然,您要寻找的是关联数组。您可以将主数组重写为“关联数组”(实际上是一个对象):

那么你要找的就是:

main[obj.x][obj.y]

main.indexOf(obj)
永远不会起作用,因为我知道,
obj
main
中假定的双胞胎是两个完全不同的对象。我只是把它放在那里,展示我想实现的目标。所以你的意思不是这个:?@Mathletics哈哈,这很有道理!说真的,我希望人们理解迭代是在某个层次上发生的(无论是在开发人员的层次上,还是在实现的层次上)@Ian这正是我的观点;-)谢谢,我不知道第二个grep参数如果您只查找
索引
,而不查找
结果
,则绝对不应该使用
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);
var main = {
    "8": {
        "3": {...}
    },
    "82": {
        "31": {...}
    },
// etc.
};
main[obj.x][obj.y]