使用对象属性进行迭代
Use object property for iteration
可以使用对象属性的"for in"-迭代在JavaScript?
我想写一个这样的Bag-Class:
var Bag = function () {
this.elements = {};
}
Bag.prototype.add = function (key, value) {
this.elements[key] = value;
};
// other methods ...
现在我想在迭代中使用这个类的对象:
for (var key in myBag) {
console.log(myBag[key]); // or myBag.get(key);
}
有可能做到这一点,没有像var key在myBag.getAll()的辅助方法?
您可以将键/值对添加到实例本身,并将方法创建为不可枚举的,例如:
function Bag() {
}
Object.defineProperty(Bag.prototype, 'add', {
enumerable: false,
value: function(k, v) {
this[k] = v
}
})
var bag = new Bag
bag.add('a',1)
bag.add('b',2)
bag.add('c',3)
for (var k in bag)
console.log(k)
//^ a
// b
// c
请注意,您也可以正常声明该方法,并始终使用hasOwnProperty
check:
for (var k in bag)
if (bag.hasOwnProperty(k))
console.log(k)
或其他替代:
Object.keys(bag).forEach(function(k) {
console.log(k)
})
这样如何,例如forEach
,但你可以制作map
或filter
或其他。
(function () {
'use strict';
function Bag() {
this.elements = {};
}
Bag.prototype = {
add: function (key, value) {
this.elements[key] = value;
},
forEach: function (fn, thisArg) {
Object.keys(this.elements).forEach(function (key) {
fn.call(thisArg, this[key], key, this);
}, this.elements);
}
};
var myBag = new Bag();
myBag.add('one', 1);
myBag.add('two', 2);
myBag.add('three', 3);
myBag.forEach(function (item, key, object) {
console.log(this, item, key, object);
}, 'hello');
}());
输出hello 1 one Object {one: 1, two: 2, three: 3}
hello 2 two Object {one: 1, two: 2, three: 3}
hello 3 three Object {one: 1, two: 2, three: 3}
在jsFiddle 相关文章:
- 如何使用jquery迭代具有相同属性的html元素并查找onclick事件
- 使用递归属性迭代保留属性结构
- 在对象上迭代.解构其键和属性并添加新的键和属性
- MongoDB属性迭代
- 迭代 DOM 中的属性
- 为什么我的jQuery .每次迭代都无法使用每个项目的属性
- 如何迭代json对象的嵌套属性并创建新的数组列表
- 创建一个生成器来迭代对象属性排列
- 在对象上迭代'的属性
- 在对象上迭代并添加新属性
- 使用 for 循环,如何迭代对象以向其添加 id 属性
- 访问特定属性并在 AngularJS 中迭代 JSON 数组
- 从数据绑定属性迭代键值对
- 如何轻松获取Javascript for loop的当前迭代属性
- BackboneJS:迭代模型属性并更改值
- 我的 JS 对象迭代在添加新属性时中断
- 如何附加具有迭代属性的元素
- 所有属性都设置为上次循环迭代值 [为什么?
- 访问并迭代模板内Kendo UI Listview的数组属性
- 迭代属性对