单个Javascript对象属性的多个值
Multiple Values for Single Javascript Object Property
我有一个javascript对象,它是在循环中动态构建的。我想在迭代过程中用新的属性替换可能已经存在的属性——基本上将对象视为Java HashSet。
为什么当你向javascript对象添加一个动态属性,然后用for in循环遍历该对象时,你会得到该属性的多个值或其他奇怪的行为?
示例:
var foo = {};
foo['bar'] = 'hello';
foo['bar'] = 'hola';
foo['bar'] = 'aloha';
foo['baz'] = 'some other thing';
var arr = [];
for(var prop in foo) { arr.push(foo[prop]) };
//2 entries (what I'd expect)
foo['bam'] = 'other other thing';
for(var prop in foo) { arr.push(foo[prop]) };
//5 entries (why?) the [bar] property should be overwritten right?
console.log(arr);
[ 'aloha',
'some other thing',
'aloha',
'some other thing',
'other other thing' ]
如何使用动态属性用新值覆盖旧值?
对象属性按照您期望的方式工作。问题是您没有清除arr
数组;所以你只是在上面叠加相同的属性。试着把arr = [];
放在你的第二个for循环之前,你应该是金色的。
可以使用类似哈希的对象;相反,如果你有这个:
var hash = {};
for( var prop in foo ) { hash[prop] = foo[prop]; }
即使重用hash
变量,您也会得到所需的行为。数组与对象不同。
您从未在第一个循环后清除过数组。因此,您将"bar"answers"baz"添加到数组中,然后将"bam"添加到foo中,再次循环通过foo并获得"bar"、"baz’(来自第一次迭代),然后获得"bar’、"baz'和"bam’(来自第二次迭代)
相关文章:
- 保存具有相同属性 JavaScript 的元素上的值
- DOM 元素上的空样式属性:JavaScript
- 基于一个属性Javascript检索多个对象
- xml获取属性javascript不会;无法处理childNodes
- 当输入填充了必需的属性javascript/html/css时,如何更改焦点颜色
- 如何处理未定义属性的未定义属性 javascript 类型错误
- 向嵌套对象添加属性 - Javascript
- 属性 Javascript 的访问属性
- 更改链中的 css 属性 - JavaScript
- 更改属性 Javascript 方式的值
- 如何从 url 解析 xml 获取属性 javascript
- 语法错误:缺少:在属性 javascript 之后
- 创建 if 条件基于 CSS 属性 -- JavaScript
- 访问节点的属性javascript二进制搜索树
- 访问父函数属性Javascript
- 为什么未定义此对象的属性?Javascript
- 访问私有属性Javascript OOP
- 访问数组中的属性?(Javascript)
- 动态添加参数作为对象的属性-JavaScript
- 冲突/方法/属性Javascript错误