相关疑难解决方法(0)

从对象数组中,将属性的值提取为数组

我有JavaScript对象数组,具有以下结构:

objArray = [ { foo: 1, bar: 2}, { foo: 3, bar: 4}, { foo: 5, bar: 6} ];
Run Code Online (Sandbox Code Playgroud)

我想提取一个包含key值的数组foo,结果值为[ 1, 3, 5 ].

我用琐碎的方法完成了这个,如下:

function getFields(input, field) {
    var output = [];
    for (var i=0; i < input.length ; ++i)
        output.push(input[i][field]);
    return output;
}

var result = getFields(objArray, "foo"); // returns [ 1, 3, 5 ]
Run Code Online (Sandbox Code Playgroud)

有没有更优雅和高效的方法来实现?


关于建议重复的注意事项,该问题询问如何将对象转换数组,这个问题询问如何对象数组中提取单个属性.

javascript javascript-objects

851
推荐指数
19
解决办法
60万
查看次数

在数组内构造所有元素的对象属性

在最基本的形式中,拥有一个对象数组:

let arr = [
  {val:"a"},
  {val:"b"}
];
Run Code Online (Sandbox Code Playgroud)

如何使用解构,只获得价值['a', 'b'].

获得第一个值很容易:

let [{val:res}] = arr; //res contains 'a'
Run Code Online (Sandbox Code Playgroud)

获取数组内的所有值可以使用rest运算符完成:

let [...res] = arr; //res contains all objects
Run Code Online (Sandbox Code Playgroud)

结合这些,我希望能够使用:

let [...{val:res}] = arr; //undefined, expected all 'val's (['a', 'b'])
Run Code Online (Sandbox Code Playgroud)

以上返回undefined(在FF中测试).一些进一步的测试似乎表明,在使用对象解构时添加rest运算符也不使用迭代,而是返回原始对象,例如let [...{length:res}] = arr; //res= 2.其他一些试验,例如let [{val:...res}] = arr;let [{val}:...res] = arr;产生语法错误.

使用其他方法很容易,例如map在数组上使用,但大多数情况下我在解析多个级别(一个包含自己的属性包含数组的对象的数组)时会偶然发现这个问题.因此,我真的想通过解构来解决如何做到这一点.为方便起见:一个测试小提琴

编辑

如果我没有解释问题的目标,我表示歉意.我不是在寻找特定问题的解决方案,只是为了找到在解构时使用的正确语法.

否则制定,第一个问题是:在上面的例子中,为什么不let [...{val:res}] = arr;返回所有值(['a', 'b']).第二个问题是:使用具有嵌套对象解构的rest运算符的正确语法是什么?(很确定我已经在这里混淆了一些定义).似乎后者不受支持,但我没有遇到任何文件(以及为什么)它不会.

javascript destructuring

10
推荐指数
2
解决办法
6943
查看次数

解析es6中的对象数组

在es6中,如何使用解构来简化以下行?:

const array0 = someArray[0].data;
const array1 = someArray[1].data;
const array2 = someArray[2].data;
Run Code Online (Sandbox Code Playgroud)

javascript destructuring ecmascript-6

8
推荐指数
2
解决办法
8349
查看次数