可能是重复问题:
如何在JavaScript中从数组中删除
我有以下JSON对象:
[id:84,id:92,id:123,id:2353]
如何使用JavaScript删除值为“123”的项?
或者,如果我将JSON格式化为
[84, 92, 123, 2353]
在这种情况下,它将如何被移除?
可能是重复问题:
如何在JavaScript中从数组中删除
我有以下JSON对象:
[id:84,id:92,id:123,id:2353]
如何使用JavaScript删除值为“123”的项?
或者,如果我将JSON格式化为
[84, 92, 123, 2353]
假设您有以下内容:
var items = [{ id: 84 }, { id: 92 }, { id: 123 }, { id: 2353 }];
var filtered = items.filter(function(item) {
return item.id !== 123;
});
//filtered => [{ id: 84 }, { id: 92 }, { id: 2353 }]
json
变量的JSON对象。for (key in json) {
if (json.hasOwnProperty(key) && json[key] == 123) {
delete json[key];
}
}
hasOwnProperty
进行过滤。此外,一个键是唯一的,因此只能有一个出现(=> 为什么要循环?)。 - Paul S.hasOwnProperty
是对的,我会修复这个问题。而循环是因为我们想要从它的值中删除一个键,而不是键本身。 - Magus更简短的替代方案是:
var newArr = [{id:84}, {id:92}, {id:123}, {id:2353}].filter(function(a) {
return a.id != 123;
});
假设你有这个数组:
var arr = [{id:84}, {id:92}, {id:123}, {id:2353}]
如果你想要移除值为123的项,你可以进行以下操作:
for(var i = 0; i < arr.length; i++) {
if(arr[i].id == 123) {
arr.splice(i, 1);
break;
}
}
function removeClass(obj, cls) {
var classes = obj.className.split(' ');
for(i=0; i<classes.length; i++) {
if (classes[i] == cls) {
classes.splice(i, 1);
i--; // (*)
}
}
obj.className = classes.join(' ');
}
var obj = { className: 'open menu menu' }
removeClass(obj, 'menu')
alert(obj.className)
var data = [{id:84}, {id:92}, {id:123}, {id:2353}];
function remove(){
for(var i = 0, max = data.length; i < max; i++) {
var a = data[i];
if(a.id === 123) {
data.splice(i, 1);
break;
}
}
}
remove();
看起来你想避免一个循环。假设它可用,你可以使用.filter
:
[{id:84},{id:92},{id:123},{id:2353}]
.filter(function (elem) { return elem.id !== 123; });
这个技术上确实会循环,但至少你不必看它。
var myString = "[84, 92, 123, 2353]";
var myArray = JSON.parse(myString);
var index = myArray.indexOf(123); // whatever value you are looking for
myArray.splice(index, 1);
假设我正确理解了您的问题和评论,您可以像这样做:
var old_array = [{id: 84},...];
var new_array = [];
for(var i = 0, len = old_array.length; i++) {
if (old_array[i].id != 123) new_array.push(old_array[i]);
}
您目前手头的不是 JSON,因此我会给您提供一些其他选项。
如果您有一个 数组 arr = [84, 92, 123, 2353]
,那么
arr = arr.filter(function (x) {return x !== 123;}); // all occurrences
// OR
arr.splice(arr.indexOf(123), 1); // first occurrence only
obj = {"84": a, "92": b, "123": c, "2353": d}
,其中 a
到 d
是一些表达式,那么delete obj['123']; // obj now {"84": a, "92": b, "2353": d}
1)JSON 是一个字符串,不是一个数组或一个对象。
var json = "[1,2,3]";
2) 有效的 JSON 必须是有效的 JS
var myJSObj = { 1,2,3 }, // broken
myJSArr = [ name : 1, name2 : 2 ]; // broken
3) 如果你有一个JS数组,你可以使用[].splice
来删除一个元素
var arr = [ 1, 2, 3, 4 ],
i = 0, l = arr.length,
test = 4;
for (; i < l; i += 1) {
if (arr[i] === test) { arr.splice(i, 1); } // remove 1 starting at i
}
4) 如果您有一个带有命名键的对象,您可以使用delete
var obj = { val : 1 };
delete obj.val;
[{id:1},{id:2}]
。它很小、有效,并显示节点信息,只不过JSON是一个字符串。 - Norguardfilter
只是使用循环并返回通过循环测试的所有项目的第二个数组。 - Norguard