javascript - IndexOf 和 .splice() 等效于对象

标签 javascript jquery

我有以下代码(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

关于javascript - IndexOf 和 .splice() 等效于对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17798278/

相关文章:

jquery - 使用 jQuery 隐藏跨度

javascript - TinyMCE 未初始化,但没有 JavaScript 错误

javascript - 重新加载时 HTML5 本地存储不起作用

javascript - 免点调试

javascript - 展开三元语句或切换到 if-else

javascript - 在运行时在 Three.js 中更改从 blender 导入的模型的面部颜色

javascript - 单击时在 JQuery colorbox 中打开 <a> 链接的 URL

javascript - jQuery javascript 自定义排序程序在 Firefox 中有效,但 IE 似乎无法获取它...(复制粘贴示例代码)

javascript - 如何修复 “Failed to load resource: the server responded with a status of 400 ()” API获取错误

javascript - jQuery Ajax 请求 (CORS) 返回未定义