Javascript 如何在对象上使用Array.prototype.forEach?
我只是想做一个学习用的小框架,我想能够在对象上使用Javascript 如何在对象上使用Array.prototype.forEach?,javascript,prototype,Javascript,Prototype,我只是想做一个学习用的小框架,我想能够在对象上使用Array.prototype.forEach,这就是我现在拥有的 var data = { test: 'test' }; Array.prototype.forEach(data, function(key value) { console.log(key); }); 但是我得到一个错误,我相信你们可以理解为什么,但我不能:)所以任何帮助都将非常感谢:)对象不是数组,并且没有访问数组原型的权限。您可以在属性上循环 for(var
Array.prototype.forEach
,这就是我现在拥有的
var data = { test: 'test' };
Array.prototype.forEach(data, function(key value) {
console.log(key);
});
但是我得到一个错误,我相信你们可以理解为什么,但我不能:)所以任何帮助都将非常感谢:)对象不是数组,并且没有访问数组原型的权限。您可以在属性上循环
for(var key in data){
console.log(key) //or data[key] if you want the values
}
关于下面的jQuery注释,它们似乎在内部为“each”函数使用循环。从:
//参数仅供内部使用
每个:函数(对象、回调、参数){
var值,
i=0,
长度=对象长度,
isArray=isArraylike(obj);
如果(args){
如果(isArray){
对于(;i
对象不是数组,无法访问数组原型。您可以在属性上循环
for(var key in data){
console.log(key) //or data[key] if you want the values
}
关于下面的jQuery注释,它们似乎在内部为“each”函数使用循环。从:
//参数仅供内部使用
每个:函数(对象、回调、参数){
var值,
i=0,
长度=对象长度,
isArray=isArraylike(obj);
如果(args){
如果(isArray){
对于(;i
您可以通过为(输入数据)
迭代对象键,并通过数据[key]
获取每个值。即
for(key in object) {
console.log(key, data[key]);
}
您可以通过
for(输入数据)
遍历对象键,并通过data[key]
获取每个值。即
for(key in object) {
console.log(key, data[key]);
}
这样做:
Object.keys(data).forEach(function(key) {
console.log(data[key])
});
objEach(data, function(val, key) {
console.log(key, val)
})
obj = { "test1": 1, "test2": 2 };
obj.forEach(function(key, val) {
console.log(key, val);
});
如果需要,可以为旧浏览器填充Object.keys()
如果愿意,可以为此操作生成包装函数:
function objEach(obj, fn) {
Object.keys(obj).forEach(function(key) {
fn(obj[key], key)
})
// or use for-in
}
然后像这样使用它:
Object.keys(data).forEach(function(key) {
console.log(data[key])
});
objEach(data, function(val, key) {
console.log(key, val)
})
obj = { "test1": 1, "test2": 2 };
obj.forEach(function(key, val) {
console.log(key, val);
});
这样做:
Object.keys(data).forEach(function(key) {
console.log(data[key])
});
objEach(data, function(val, key) {
console.log(key, val)
})
obj = { "test1": 1, "test2": 2 };
obj.forEach(function(key, val) {
console.log(key, val);
});
如果需要,可以为旧浏览器填充Object.keys()
如果愿意,可以为此操作生成包装函数:
function objEach(obj, fn) {
Object.keys(obj).forEach(function(key) {
fn(obj[key], key)
})
// or use for-in
}
然后像这样使用它:
Object.keys(data).forEach(function(key) {
console.log(data[key])
});
objEach(data, function(val, key) {
console.log(key, val)
})
obj = { "test1": 1, "test2": 2 };
obj.forEach(function(key, val) {
console.log(key, val);
});
如上所述,对象和数组是不同的东西。通过使用“调用”进行调用,您可以创建一个函数来完成这项工作:
Object.prototype.forEach = function(func, context) {
var value;
context = context || this; //apply the function to 'this' by default
for (key in this) {
if (this.hasOwnProperty(key)) { //to rule out inherited properties
value = this[key];
func.call(context, key, value);
}
}
};
然后像这样使用它:
Object.keys(data).forEach(function(key) {
console.log(data[key])
});
objEach(data, function(val, key) {
console.log(key, val)
})
obj = { "test1": 1, "test2": 2 };
obj.forEach(function(key, val) {
console.log(key, val);
});
如上所述,对象和数组是不同的东西。通过使用“调用”进行调用,您可以创建一个函数来完成这项工作:
Object.prototype.forEach = function(func, context) {
var value;
context = context || this; //apply the function to 'this' by default
for (key in this) {
if (this.hasOwnProperty(key)) { //to rule out inherited properties
value = this[key];
func.call(context, key, value);
}
}
};
然后像这样使用它:
Object.keys(data).forEach(function(key) {
console.log(data[key])
});
objEach(data, function(val, key) {
console.log(key, val)
})
obj = { "test1": 1, "test2": 2 };
obj.forEach(function(key, val) {
console.log(key, val);
});
通过ES2017,有:
对于ES5,有:
如果您的对象类似数组(意味着它有数字键和长度
),则有ES2015:
通过ES2017,有:
对于ES5,有:
如果您的对象类似数组(意味着它有数字键和长度
),则有ES2015:
试试这个:
obj = {}; // Some object
obj.forEach = function(fn) {
Object.keys(this).forEach((k)=> {
if (typeof(this[k]) != 'function')
fn(this[k]);})
};
试试这个:
obj = {}; // Some object
obj.forEach = function(fn) {
Object.keys(this).forEach((k)=> {
if (typeof(this[k]) != 'function')
fn(this[k]);})
};
我假设“为什么?”是因为对象不是数组。匿名函数中的参数也有语法错误。我假设“为什么?”是因为对象不是数组。您的匿名函数中的参数也有语法错误。这是可行的,我只是认为jQuery是用它们的$实现的。每个使用foreach原型的函数我认为您将数组的foreach方法与此工作中的for循环混淆了,我只是认为jQuery是用他们的$实现的。每个函数都使用foreach原型。我认为你把数组的foreach方法和for-in循环混淆了为什么这是被否决的?有人能解释一下这种方法的问题吗?想象一下,如果您需要解析一个充满数组的巨大JSON blob。在for中的数组上使用.forEach。。。in-loop将导致任何JS linter抛出一个合适的值。和使用嵌套的。。。in循环变得很快,因为声明的所有变量的作用域都是周围的函数。键和值参数可能应该反转以匹配每个原型的数组。为什么这是向下投票?有人能解释一下这种方法的问题吗?想象一下,如果您需要解析一个充满数组的巨大JSON blob。在for中的数组上使用.forEach。。。in-loop将导致任何JS linter抛出一个合适的值。并使用嵌套