Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.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…In循环”是创建对象的唯一选项吗?_Javascript_Node.js - Fatal编程技术网

Javascript “For…In循环”是创建对象的唯一选项吗?

Javascript “For…In循环”是创建对象的唯一选项吗?,javascript,node.js,Javascript,Node.js,是“For In-loop only”选项来创建具有属性的对象,还是有更好的方法?我想创建一个对象而不是数组 目前它使用循环数据。批处理用于循环中,并进行一些总体计算和属性映射 例如: let数据={ 批次:{ 111:{BatchId:111,名称:“批次1”,Count2017:100,Count2018:100}, 222:{BatchId:222,名称:“批次2”,COUN2017:200,COUN2018:300} } }; 函数calculateBatch(批处理){ mapped

是“For In-loop only”选项来创建具有属性的对象,还是有更好的方法?我想创建一个对象而不是数组

目前它使用循环数据。批处理用于循环中,并进行一些总体计算和属性映射

例如:

let数据={
批次:{
111:{BatchId:111,名称:“批次1”,Count2017:100,Count2018:100},
222:{BatchId:222,名称:“批次2”,COUN2017:200,COUN2018:300}
}
};
函数calculateBatch(批处理){
mappedObject={};
设grandTotal=0;
for(data.Batch中的const batchId){
合计=data.Batch[batchId].Count2017+data.Batch[batchId].Count2018;
mappedObject[batchId]={
BatchId:BatchId,
名称:data.Batch[batchId].Name,
总计:总计
};
总计+=总计
}
返回{
批处理:mappedObject,
总计:总计
}
}

console.log(calculateBatch(data.Batch))
您可以使用
Object.keys()
获取属性名数组,然后使用
reduce()
创建结果对象:

return Object.keys(batch).reduce(function(result, key) {
  let total = batch[key].Count2017 + batch[key].Count2018;
  result.Batch[key] = {
    BatchID: key,
    Name: batch[key].Name,
    Total: total
  };
  result.GrandTotal += total;
  return result;
}, { Batch: {}, GrandTotal: 0 });
这是否比您发布的代码“更好”是主观的。稍微短一点;这会使它更具可读性、可维护性还是更少?不同的人会给出不同的答案


至于性能,对于任何实际应用,几乎任何简单的迭代方法都将与另一种方法一样快。如果你有数百万个这样的批次,那么没有什么能让迭代在绝对意义上“快速”。

这是最好(最快)的方法,虽然看起来你的
批处理
数据结构可能是一个
数组
而不是
对象
,因为如果你没有真正使用密钥,那么就没有意义了,你的问题很模糊。请用清晰的句子描述它。你可能想搜索object Reduce。FFT,至少有六种方法可以创建一个对象。你对“更好”的定义是什么?如果它会“更快”,你有最快的。如果它是最短或功能最强大的编程风格,那么还有其他选择。我不是说最快,我是说可维护且易于阅读。@我会回来的,你能在问题中具体说明吗?它目前没有这样说。“更好”可能意味着很多事情。@我会回来的,当然,这是一个风格问题,你必须考虑你自己的喜好。“易读”是一个相当主观的衡量标准,我会说。一般来说,当我对计算机科学缺乏经验时,阅读容易对我来说是阅读时容易理解的东西。用于循环、可变变量赋值和重新赋值。今天,我发现纯函数式编程示例更容易阅读和理解。有趣的是,.TBH,我不认为
reduce
更短,因为它通常需要一个额外的
return
语句。其余的只是不同的格式。