将对象的javascript数组转换为数组
我正在ES6中寻找一种优雅的方式来转换此阵列:将对象的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'
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不是真的。钥匙的顺序不能保证。是的,你说得对。我忘了这个案子的顺序了。