为什么" forEach不是一个功能"对于这个对象?

时间:2015-06-28 05:55:13

标签: javascript object foreach

这可能是非常愚蠢的,但我不明白为什么这不起作用。

var a = {"cat":"large"};

a.forEach(function(value, key, map){
    console.log(value);
});

未捕获的TypeError:a.forEach不是函数

http://jsfiddle.net/ty7z6pse/

3 个答案:

答案 0 :(得分:46)

对象没有forEach,它属于to Array prototype。如果要遍历对象中的每个键值对并获取值。你可以这样做:

Object.keys(a).forEach(function (key){
    console.log(a[key]);
});

使用说明:对于对象v = {"cat":"large", "dog": "small", "bird": "tiny"};Object.keys(v)会为您提供一系列密钥,以便您获得 [“cat”,“dog”,“鸟“]

答案 1 :(得分:0)

当我尝试从

访问结果时

Object.keys(a).forEach(function (key){ console.log(a[key]); });

它是纯文本结果,没有键值对 这是一个例子

var fruits = {
    apple: "fruits/apple.png",
    banana: "fruits/banana.png",
    watermelon: "watermelon.jpg",
    grapes: "grapes.png",
    orange: "orange.jpg"
}

现在我想在一个单独的数组中获取所有链接,但使用此代码

    function linksOfPics(obJect){
Object.keys(obJect).forEach(function(x){
    console.log('\"'+obJect[x]+'\"');
});
}

结果:

linksOfPics(fruits)



"fruits/apple.png"
 "fruits/banana.png"
 "watermelon.jpg"
 "grapes.png"
 "orange.jpg"
undefined

我想出了一个解决了我正在寻找的问题

  console.log(Object.values(fruits));
["fruits/apple.png", "fruits/banana.png", "watermelon.jpg", "grapes.png", "orange.jpg"]

答案 2 :(得分:0)

如果您确实需要使用安全的foreach接口来迭代对象,并使其可重复使用并通过npm模块进行清理,则可以使用它, https://www.npmjs.com/package/foreach-object

例如:

import each from 'foreach-object';
   
const object = {
   firstName: 'Arosha',
   lastName: 'Sum',
   country: 'Australia'
};
   
each(object, (value, key, object) => {
   console.log(key + ': ' + value);
});
   
// Console log output will be:
//      firstName: Arosha
//      lastName: Sum
//      country: Australia