从“对象文字”数组中删除“对象文字”的最常用方法(可能在javascript中)是什么,我的意思是如何确定要删除的对象的索引是什么。
键是相同的,只有值可以改变。
假设我们有
arrObj = [{k: "a"},{k: "b"},{k: "c"},{k: "d"}]; //{k: "a"}
只是一个oject文字的例子,但是每个对象也可以更像这样嵌套
{k: "a", {y: {z: "c"}} }
我想定义一个能够制作这个东西的函数文字:
var removeObjFromArray = function (obj){ ... };
arrObj.removeObjFromArray({k: "b"}); // {k: "a"},{k: "c"},{k: "d"}
答案 0 :(得分:1)
可能有更好的方法来做你正在做的事情。要在此处获得所需的解决方案,您需要迭代数组并然后比较对象。一种解决方案是使用JSON,尽管您会在需要compatibility shim的旧版浏览器中看到性能损失。如果您不需要比较功能,这只是一个可行的解决方案。这样的事情应该有效:
function removeFromArray(arr, obj) {
obj = JSON.stringify(obj);
for (var i=0, max = arr.length; i < max; i++) {
if (JSON.stringify(arr[i]) === obj)
arr.splice(i, 1);
}
}
请注意,在注释中提及 cdhowie 时,迭代顺序是JSON的一个因素,并且需要以相同的顺序定义对象属性。但是,如果没有JSON,则必须迭代每个对象的键和多次遍历参数中传递的对象,以确保两个对象包含相同的键和相同的值,使其更复杂任务和原生JSON相比要慢很多。
正如我在第一句话中所说的那样,“可能有更好的方法来做你正在做的事情”,你可能最好再看看你的做法。< / p>
答案 1 :(得分:0)
您需要定义两个对象何时“相同”。在您的示例中,removeObjFromArray
的参数实际上是与数组中的对象不同的对象(如果通过引用进行比较),因为每个文字语法都会创建一个不同的对象。
如果您知道他们总是有一个名为“k”的键,您可以对此进行比较,但我想您正在寻找更通用的解决方案?
如果两个对象具有相同的具有相同值的属性(在对象的情况下进行递归比较),则可以确定它们是相同的。但这实际上取决于你的程序的用例。