Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将对象的javascript数组转换为数组_Javascript_Arrays_Ecmascript 6 - Fatal编程技术网

将对象的javascript数组转换为数组

将对象的javascript数组转换为数组,javascript,arrays,ecmascript-6,Javascript,Arrays,Ecmascript 6,我正在ES6中寻找一种优雅的方式来转换此阵列: var src = [{x:1,y:'a'},{x:2,y:'b'}]; var desc = [[1,2],["a","b"]]; 要创建此阵列,请执行以下操作: var src = [{x:1,y:'a'},{x:2,y:'b'}]; var desc = [[1,2],["a","b"]]; 它包含一个包含所有属性的数组和一个包含所有值的数组 为此,我编写了以下代码: var src = [{x:1,y:'a'},{x:2,y:'b'

我正在ES6中寻找一种优雅的方式来转换此阵列:

var src = [{x:1,y:'a'},{x:2,y:'b'}];
var desc = [[1,2],["a","b"]];
要创建此阵列,请执行以下操作:

var src = [{x:1,y:'a'},{x:2,y:'b'}];
var desc = [[1,2],["a","b"]];
它包含一个包含所有属性的数组和一个包含所有值的数组

为此,我编写了以下代码:

var src = [{x:1,y:'a'},{x:2,y:'b'}];

var prop1 = [];
var prop2 = [];

src.forEach(item => {
    prop1.push(item.x)
    prop2.push(item.y);
});

var desc = [prop1, prop2];
它工作得很好,但很长,所以我正在寻找一个最终的改进和一个简短的代码。

您命名道具顺序(因为对象中键的顺序没有保证),然后通过提取对应的道具值映射到
src
数组

var src=[{x:1,y:'a'},{x:2,y:'b'}]
var props=['x','y'];
var result=props.map(prop=>src.map(x=>x[prop]))

log(result)
您可以迭代数组,然后通过对象的键切换目标元素的外部和内部索引

var src=[{x:1,y:'a'},{x:2,y:'b'}],
desc=[];
src.forEach(o=>Object.keys(o).forEach((k,i)=>(desc[i]=desc[i]| |[])。push(o[k]));
控制台日志(desc)您可以使用
.reduce()

让src=[{x:1,y:'a'},{x:2,y:'b'}];
让result=src.reduce((a,c)=>(a[0]。推送(c.x),a[1]。推送(c.y),a),[[],[]);
控制台日志(结果)

.as控制台包装{max height:100%!important;top:0;}
可能与您的控制台包装相同,但我会保留它。它可读性很强,你不必考虑“输出会是什么”。将所有内容放在一行并不一定意味着它更好或“更聪明”…唯一可能的问题是objectright中的属性顺序不受保证,我假设,键的顺序与给定代码中的顺序相同。很好。但是,如果
props=Object.keys(src[0])
而不是硬编码的值,可能会更酷。@MohammadUsman不是真的。钥匙的顺序不能保证。是的,你说得对。我忘了这个案子的顺序了。