为啥这个对象的“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/
【问题讨论】:
forEach
在Array
的prototype
中定义,而不是在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 不是函数”?的主要内容,如果未能解决你的问题,请参考以下文章