为啥这个对象的“forEach 不是函数”?

Posted

技术标签:

【中文标题】为啥这个对象的“forEach 不是函数”?【英文标题】:Why is "forEach not a function" for this object?为什么这个对象的“forEach 不是函数”? 【发布时间】:2015-09-14 18:57:27 【问题描述】:

这可能真的很愚蠢,但我不明白为什么这不起作用。

var a = "cat":"large";

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

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

http://jsfiddle.net/ty7z6pse/

【问题讨论】:

forEachArrayprototype 中定义,而不是在Object 中。 因为对象没有forEach,所以数组有 地图没有这个功能吗? developer.mozilla.org/en-US/docs/Web/javascript/Reference/… var a = ; 没有创建地图吗?为什么用[] 构造数组(因为forEach 作用于这样创建的变量)? @haventchecked 不,Map 是一个新的 ES6 标准。您拥有的是object literal。如果你想要一个Map,那就是var map = new Map(); map.set("cat", "large"); 【参考方案1】:

对象没有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","bird"]

【讨论】:

@RGraham 是什么意思? 哦,刚刚注意到了。太快了,我没注意。是的,最好也留下评论或建议。【参考方案2】:

当我尝试从

访问结果时

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"]

【讨论】:

【参考方案3】:

如果您确实需要使用安全的 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

【讨论】:

以上是关于为啥这个对象的“forEach 不是函数”?的主要内容,如果未能解决你的问题,请参考以下文章

Discord.js:message.guild.channels.forEach 不是函数

forEach 不是函数错误

JS 'body.forEach 不是函数' 上的错误

为啥 R 对象不在函数或“for”循环中打印?

forEach 不是函数

foreach在Angular 8中不是函数