【问题标题】:Errors while looping through the objects循环遍历对象时出错
【发布时间】:2019-09-27 04:10:23
【问题描述】:

我有一个对象,比方说项目,我试图循环遍历这些对象,但出现此错误“无法将未定义或 null 转换为对象。

let items = {
  id: 1,
  name: "name1",
  currency: "usd"
}
const result = Object.keys(items).map(index => index.name);
console.log(result);

【问题讨论】:

  • 预期输出是什么?
  • 我想你想要items[index]而不是index.name
  • 或只是const result = Object.values(items)
  • 也许不需要地图,只需要Object.keys(items)
  • 预期输出应该是 name1/usd 这是我必须在我的代码中使用的方式

标签: javascript arrays reactjs object ecmascript-6


【解决方案1】:

如果您想获取密钥,请使用Object.keys。值,Object.values

let items = {
  id: 1,
  name: "name1",
  currency: "usd"
};
const keys = Object.keys(items);
const vals = Object.values(items);
console.log(keys);
console.log(vals);
.as-console-wrapper { max-height: 100% !important; top: auto; }

根据您当前使用Object.keys 的代码,我认为您想要items[index] 而不是index.name

let items = {
  id: 1,
  name: "name1",
  currency: "usd"
}
const result = Object.keys(items).map(index => items[index]);
console.log(result);

【讨论】:

  • 如果我想从这个对象中显示“name1”怎么办
【解决方案2】:

当你映射键时,你得到的是键而不是对象。 Object.keys 本身也返回一个键数组,如果你想要值,请使用 Object.values()

    let items = {
      id: 1,
      name: "name1",
      currency: "usd"
    }
    const result = Object.keys(items);
    const sol = Object.values(items);
    console.log(result, sol);

【讨论】:

    【解决方案3】:

    这是真正的代码,也许它可以帮助你。 Object.keys(object) 将返回一个对象键的数组

    Object.keys(items) // => ['id', 'name', 'currency']
    
    ['id', 'name', 'currency'].map(index =>n. index)//there is no ‘name’ attribute, so it will definitely be undefined
    

    【讨论】:

    • 这将导致错误和[undefined, undefined, undefined]。使用items[index]
    【解决方案4】:

    无需映射。只需使用

    Object.values(items) for values 
    

    Object.keys(items) for keys
    

    let items = {
      id: 1,
      name: "name1",
      currency: "usd"
    }
    const result = Object.values(items)
    
    console.log(result);

    【讨论】:

      【解决方案5】:

      您可以像这样循环给定objectkeysvalues

      let items = {
        id: 1,
        name: "name1",
        currency: "usd"
      }
      Object.keys(items).forEach(function(key, index) {
         console.log("key=>", key, ", index=>", index,", value=>", items[key]);
      })

      【讨论】:

        【解决方案6】:

        Object.keys() 方法返回一个给定对象自身属性名称的数组,其顺序与我们在正常循环中得到的顺序相同。

        const items = {
          id: 1,
          name: 'name1',
          currency: 'usd'
        };
        

        console.log(Object.keys(items)); //outputs ['id','name','currency']

        既然你用过,Object.keys(items).map(index => index.name);

        id.name 将是 undefined 因此你得到undefined

        所以,你可以使用

        const result = Object.keys(items).map(index => items[index]);
        

        这将导致 [1, 'name1', 'usd']

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-09
        • 2019-09-12
        • 1970-01-01
        • 2020-04-30
        • 2017-06-12
        • 2015-10-31
        • 2014-11-30
        • 1970-01-01
        相关资源
        最近更新 更多