【问题标题】:Create an array from first element of an array从数组的第一个元素创建一个数组
【发布时间】:2018-07-02 02:31:46
【问题描述】:

假设我们有这个数组

[{name:string,address:string,tel:string},{name:string, address:string, tel:string}]
  • 数组中的每个对象都属于同一类型
  • 我想从每个对象中提取相同的属性

如何从第一个数组中包含的对象创建这个数组?

[name:string, name:string]

我还是 javascript/typescript 的新手,我正在尝试找到一种有效的方法来做到这一点

有什么想法吗?

【问题讨论】:

  • 什么是{a1,a2,a3}?这不是一个数组。那是Set 对象吗?
  • 我已经简化了符号,{a1,a2,a3} 只是一个 json 对象,其中a1 可以是任何前置类型。我看过 Map ,它似乎与使用 forEach 或简单的 while 做同样的事情
  • 你能发布一个示例对象吗?因为你目前的描述是不可能的。您不能在没有键的情况下为对象分配值。 { a : 1 } = 好极了。 {1} = 没那么多。
  • 我用类型编辑了示例,但并没有改变我认为的问题,对象是简单的 json 对象^^"

标签: arrays node.js typescript


【解决方案1】:

Object 中的元素不有任何顺序。但是每个值的键都有。所以你可以访问第一个key in the object,并使用它来获取想要的值。

像这样:

let arrOfObjects = [
     {a: 1, b: 2, c: 3},
     {a: 4, b: 5, c: 6}
];
let newArr = arrOfObjects.map( item => item[Object.keys(item)[0]]); // [1,4]

或者,在你的情况下,如果你只想要每个人的名字(不管对象中键的顺序),一个更好的方法是这样的:

let personArr = [
    {name: "Dan",  address: "here",  phon: "123"},
    {name: "Dany", address: "there", phon: "456"}
];

 let namesArr = arrOfObjects.map( item => item.name);  //  ["Dan", "Dany"]

【讨论】:

【解决方案2】:
let m = [];
let a = [{'a1' : 1 ,'a2': 2, 'a3': 3},{'b1': A, 'b2': B, 'b3': C}];
let arrLength = a.length;
let objLength = 3;

for(let i = 0; i < objLength; i++){
    for(let j = 0; j < arrLength; j++){
        m.push(a[j][Object.keys(a[j])[i]]);
    }
}

输出

[1, "A", 2, "B", 3, "C"]

【讨论】:

  • 这正是我试图避免的,如果可能的话
  • 你到底想避免什么?循环播放?
  • 是的,我正在尝试找到一个不涉及此类循环的解决方案。尽管也许没有其他方法可以做到这一点:/在您的示例中,只有 a1 和 b1 应该保留在输出中。我编辑了我的例子,可能还不够清楚
  • 更新了我的答案。
猜你喜欢
  • 2022-11-12
  • 1970-01-01
  • 2017-09-08
  • 1970-01-01
  • 2018-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-31
相关资源
最近更新 更多