How do you remove certain items in javascript object?
Possible Duplicate:
Remove item from object
我有一个物体如下:
1 2 3 4 5 6 7 8
| questions = new Object();
questions = {
"q1":"answer1",
"q2":"answer2",
"q3":"answer3",
"q4":"answer4"
} |
如何删除q3和q4并仍保留q1和q1?请尽可能以动态方式对此提出建议,因为Questions对象是动态填充的,并且可能具有不同数量的项。
我试过用。没运气的切片:
1 2
| question ="q2";
questions = questions.slice(0, question); |
- 使用delete…
- 注意,{}语法实际上创建了一个对象,因此questions = new Object();行是完全冗余的。它是多余的,因为你正在重写它。
- 谢谢。不过,我对delete object很熟悉,这并不能实现我想要实现的目标。基本上,我想从某个位置(或索引)删除剩余的项目。
- @stillasking:对象属性没有位置。
- @在javascript中,stillasking对象键本质上是无序的。它们永远不会有索引或位置。也许你想要一个数组?
- @stillquestion:如果键是可排序的,那么最接近的方法是使用Object.keys获取键,对键数组进行排序,然后从所需的点向前迭代数组,使用delete一次删除对象的每个属性。
- 啊…我明白了。所以,除非我循环遍历某些项并与条件匹配,否则永远不可能自动引用它们?
- @仍在提问:正确。如果可能的话,排序会有一点帮助,比如你的q1,q2等可以被排序,这样你就可以删除某个点上的所有内容。但如果这不是您的键的性质,那么是的,它将是一个枚举所有属性的问题,并删除那些满足条件的属性。不能保证枚举顺序是一致的。
- @amnotiam@alex根据你们的建议让我们使用Object.key(),我让它在除ie8之外的所有主要浏览器上工作。看来IE8不支持Object.key(),您知道的任何最佳实践调整和技巧吗?谢谢!!!!
- 我知道了:if(typeof Object.keys !=="function"){ Object.keys = function(obj){ var arr = []; for (var k in obj) { if (obj.hasOwnProperty(k)) arr.push(k); } return arr; } }。
- @还有问题:是的,那可以作为Object.keys的垫片。现在想不出任何有价值的调整。
- 只需像thisdelete questions.q2或delete questions[question]那样使用delete
1 2
| delete questions.q1;
console.log(questions.q1); // undefined |
delete关键字从对象中删除属性。它与设置null的属性不同,它完全删除了键。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| var a = { b: 123 };
console.log(a.b); // 123
console.log(Object.keys(a)); // ['b']
a.b = null;
console.log(a.b); // null
console.log(Object.keys(a)); // ['b']
a.b = void 0;
console.log(a.b); // undefined
console.log(Object.keys(a)); // ['b']
delete a.b;
console.log(a.b); // undefined
console.log(Object.keys(a)); // [] |
- 如果我使用a.b = void 0;,它就不会擦除密钥。Object.keys(a)仍将返回['b']。键的值只是undefined。变化不大。
- 是的,我的错,我没有注意到它们(只是判断日志)。删除。