如何从散列中删除所有元素并保留引用
How to remove all elements from hash and keep the reference
我需要从散列/对象中删除所有内容并保留引用。下面是一个例子
var x = { items: { a: 1, b: 2} }
removeItems(x.items) ;
console.log(x.items.clean) ;
function removeItems(items) {
var i ;
for( i in items; i++ ) {
delete items[i] ;
}
items.clean = true ;
}
我想知道是否有更短的方法来实现这一点。例如,可以按如下方式清理数组
myArray.length = 0 ;
有什么建议吗?
目前还没有简单的方法来做到这一点,但是ECMAScript委员会看到了这个需求,并且在下一个JS版本的当前规范中有。
这里有一个替代的解决方案,使用ECMAScript 6映射:
var x = {}
x.items = new Map();
x.items.set("a",1);
x.items.set("b",2);
//when you want to remove all the items
x.items.clear();
这行不通:
var i ;
for( i in items; i++; ) {
delete items[i] ;
}
它创建了一个for循环,初始代码i in items
(它的计算结果为false
,因为items
中没有"undefined"
键,但这无关紧要),条件i++
,没有更新代码。然而i++
的计算结果是假的NaN
,因此循环将立即中断。如果没有第二个分号,它甚至作为SyntaxError。
for (var i in items) {
delete items[i];
}
顺便说一句,items.clean = true;
会再次创建一个新属性,所以对象不会真正"干净":-)
我想知道是否有更短的方法来实现这一点。例如,可以按如下方式清理数组
。你必须循环所有的属性并删除它们
对不起,没有更近的路了。你的循环不应该有i++
。
function removeItems(items) {
for(var i in items) {
delete items[i];
}
items.clean = true;
}
重构你的代码,只做x.items = {}
会更好。
相关文章:
- Jquery html() 和保留元素名称
- 单击其他元素或鼠标向上时隐藏输入框,但保留一次焦点
- 如何在页面刷新后保留动态创建的html元素及其数据/值
- 在正文中保留附加的相对元素
- 将所有元素保留在同一位置
- 如何添加动态表单元素但保留其值(JS)
- 从数组中删除元素,然后保留其状态以备将来使用,而不使用全局变量
- 单击按钮后如何保留元素
- 使用链接截断html中的文本以显示更多/更少并将元素保留在里面
- AngularJS 1.2.0 $http不保留数组元素
- 在开发元素被确认后,在开发元素下方保留一个单击按钮
- 在谷歌修饰的前元素中保留 html 字符
- 保留列表中移动元素的顺序
- 如何将附加的元素保留在父元素中
- 如何计算坐标以将元素保留在用户屏幕的区域中
- 当浏览器调整大小时,将元素保留在父视图中
- 为动态更改的元素保留事件
- 将DOM元素保留在页面上还是根据需要重新呈现它们更有效
- 重新添加的画布元素保留内容
- 如何在jQuery移除时将奇数/偶数元素保留在左侧或右侧