【问题标题】:Why is "forEach not a function" for this object?为什么这个对象的“forEach 不是函数”?
【发布时间】:2023-03-02 22:03:02
【问题描述】:

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

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");

标签: javascript object foreach


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2017-10-13
      • 2013-05-27
      • 2019-06-28
      • 1970-01-01
      • 1970-01-01
      • 2019-03-15
      • 2017-05-18
      • 1970-01-01
      • 2020-09-08
      相关资源
      最近更新 更多