Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.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 For循环包含列名称数组和另一个包含值的数组_Javascript_Arrays_Angular_Typescript Typings - Fatal编程技术网

Javascript For循环包含列名称数组和另一个包含值的数组

Javascript For循环包含列名称数组和另一个包含值的数组,javascript,arrays,angular,typescript-typings,Javascript,Arrays,Angular,Typescript Typings,有没有更具表演性的方法来完成这个循环 行有一个字符串数组 比如: 让行=[ [“col1val1”、“09”、“26”、“1”], [“col1val2”、“08”、“59”、“1”], [“col1val3”、“09”、“22”、“1”] ]; 和列具有各自的列名称 比如: let columnsNames=[“col1”、“col2”、“col3”、“col4”]; 我的实际代码: let_rows=[]; this.rows.forEach((row:string[])=>{ 设_ro

有没有更具表演性的方法来完成这个循环

有一个字符串数组

比如:

让行=[
[“col1val1”、“09”、“26”、“1”],
[“col1val2”、“08”、“59”、“1”],
[“col1val3”、“09”、“22”、“1”]
];
具有各自的列名称

比如:

let columnsNames=[“col1”、“col2”、“col3”、“col4”];
我的实际代码:
let_rows=[];
this.rows.forEach((row:string[])=>{
设_row={};
columnsNames.forEach((col:string,i)=>{
_行[col]=行[i];
});
_行。推送(_行);
});
目标是返回一个对象数组,其列名称分别为

比如:

让行=[
{
col1:“事件名称”
col2:“09”
col3:“26”
col4:“1”
},
{
col1:“事件名称”
col2:“08”
col3:“59”
col4:“1”
},...
];
以下是我的方法:

让行=[
[“col1val1”、“09”、“26”、“1”],
[“col1val2”、“08”、“59”、“1”],
[“col1val3”、“09”、“22”、“1”]
];
让columnsNames=[“col1”、“col2”、“col3”、“col4”];
const newRows=rows.map(row=>{
const object=row.reduce((对象、条目、索引)=>{
返回{
…obj,
[列名称[索引]]:条目
};
}, {});
返回{
对象
};
});
console.log(新行)1衬里:

让行=[
[“col1val1”、“09”、“26”、“1”],
[“col1val2”、“08”、“59”、“1”],
[“col1val3”、“09”、“22”、“1”]
];
让columnsNames=[“col1”、“col2”、“col3”、“col4”];
let out=rows.map(row=>Object.fromEntries(columnsNames.map((col,i)=>col,row[i]]);

控制台。注销当试图找到性能最好的代码时,基准测试非常重要。在JavaScript中,你应该考虑的一个问题是,循环方法的任何方法都不会为循环执行。您可以通过缓存
长度
挤出一点额外的数据,这样就不会每次迭代都读取

因此,最有效的解决方案几乎肯定是:

let columnsNames=[“col1”、“col2”、“col3”、“col4”];
让行=[
[“col1val1”、“09”、“26”、“1”],
[“col1val2”、“08”、“59”、“1”],
[“col1val3”、“09”、“22”、“1”]
];
var_行=[];
var rlen=rows.length;
var clen=columnsNames.length;

对于(var i=0;最有效的方法将是对
循环使用良好的ol'style
。您是希望使用该代码还是短代码,这可能是使用映射
/
减少
的组合代码,但使其更具性能。顺便说一句,您选择了第二个更差的解决方案作为公认的答案。请参阅下面的基准测试。我为您的解决方案进行了更改。再次感谢。
array.reduce
通常被误用。几乎总是在使用
reduce
构建对象时,
object.fromEntries
更合适。为什么我这是误用吗?事实还是观点?-
对象。fromEntries
在这里工作得很好,没有争论。只是想了解更多的视角只是个人观点。根据我的经验,每当我编写或看到代码使用
reduce
构造对象时,使用
对象重写通常比使用
对象。fromEntries
更干净ks表示赞赏,对于这种方式,如果是一个大数组,不是会更慢吗?如果你说的是1000个元素,这很好。如果你说的是100000个元素,那么它可能很明显,运行一些性能测试可能是值得的。也就是说,这只是O(c*r)迭代和O(r)调用
Object.fromEntries
。我想不出更高性能的替代方案。我将其用于10万个元素。在angular(ts)中,
对象.fromEntries
不起作用,因为typescript中不存在此对象函数。消息:“TS2339:类型“ObjectConstructor”上不存在属性“fromEntries”。”这是typescript的一个“故意”错误。我不熟悉typescript,但它应该有一种跳过检查某些行的方法。