【问题标题】:How to get value from index property in javascript?如何从javascript中的索引属性中获取值?
【发布时间】:2019-02-03 23:04:15
【问题描述】:

这是我的代码:

const array1 = [{a: 'abc', b: 'cd'}, {a: 'abc', b: 'xyz'}, {a: 'abc', 
b: 'mno'}];
let obj = array1.reduce(function(result, item, index){
    result[index] = item
  return result;
}, {});

let dealId = 123;
let value = {};
let array2 = [];
for (var property in obj) {
   value[dealId] = array2.push(obj[property]);
}
console.log(value)

这个的输出是 Object { 123: 3 }

但我想要,这正是我所期待的。 Object { 123: [{a: 'abc', b: 'cd'}, {a: 'abc', b: 'xyz'}, {a: 'abc', b: 'mno'}] }

为什么我得到 3 而不是数组?如何获得数组?

【问题讨论】:

  • Push 返回数组的新长度。将分配移到循环之外。此外,您可以简单地使用 Object.values(obj) 代替(不同之处在于不会列出继承的属性)。

标签: javascript object ecmascript-6 hashmap namespaces


【解决方案1】:

Array.prototype.push 返回数组的新长度,而不是数组本身。您的循环将值 1、2 和 3 分配给相同的 value[dealId]

相反,您可以将赋值移到循环之外:

for (var property in obj) {
   array2.push(obj[property]);
}
value[dealId] = array2;

或者你可以简单地使用Object.values:

value[dealId] = Object.values(obj);

但请注意,这并没有列出继承的属性。

【讨论】:

    【解决方案2】:

    为什么不用一个键和给定的数组作为值来构建一个新对象?

    对于对象使用computed property name

    const
        array = [{ a: 'abc', b: 'cd' }, { a: 'abc', b: 'xyz' }, { a: 'abc', b: 'mno' }],
        key = 123,
        object = { [key]: array };
    
    console.log(object);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    【讨论】:

    • 但他预期的密钥没有""。预计是 123 而不是 "123"
    • @VicJordan,对象的键总是字符串。
    • 是的,我知道,但我认为如果我们能将同样的信息告诉 OP 会更好,即您问题中的这些信息。谢谢!
    【解决方案3】:

    你需要先添加到aaray然后创建对象

     
    
    const array1 = [{a: 'abc', b: 'cd'}, {a: 'abc', b: 'xyz'}, {a: 'abc', b: 'mno'}];
    let obj = array1.reduce(function(result, item, index){
        result[index] = item
      return result;
    }, {});
    
    let dealId = 123;
    let value = {};
    let array2 = [];
    for (var property in obj) {
      array2.push(obj[property]);
    }
     value[dealId] = array2;
    console.log(value);

    【讨论】:

      【解决方案4】:

      const array1 = [{a: 'abc', b: 'cd'}, {a: 'abc', b: 'xyz'}, {a: 'abc', 
      b: 'mno'}];
      let obj = array1.reduce(function(result, item, index){
          result[index] = item
        return result;
      }, {});
      
      let dealId = 123;
      let value = {};
      let array2 = [];
      for (var property in obj) {
         array2.push(obj[property]);
      }
      
      value[dealId] = array2;
      
      console.log(value)

      【讨论】:

        【解决方案5】:

        将新的 obj 属性 (id) 分配给请求的数组:

            let arr = [{a: 'abc', b: 'cd'}, {a: 'abc', b: 'xyz'}, {a: 'abc', 
            b: 'mno'}];
            let newObj = {};
            let id = 123;
        
            newObj[id] = arr;
            console.log(newObj);

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-27
          • 2011-11-02
          • 2016-03-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多