我有一个名为record的对象数组,其中包含超过100个字段,我需要映射每个对象以创建一个名为products的数组来添加字符串。我应该如何提高绩效?
由于
for (var i = 0; i < records.length; i++) {
var products = []
if (records[i].Custom_BA1__c === 'true'){ products.push('Custom BA1')}
if (records[i].Custom_Web_Sim__c === 'true'){ products.push('Custom Web Sim')}
if (records[i].Finance_for_Non_Financials__c === 'true'){ products.push('Finance for Non Financials')}
if (records[i].Custom_Board__c === 'true'){ products.push('Custom Board')}
...
}
答案 0 :(得分:0)
// Data from somewhere else
var records = [{
"Custom_BA1__c": "true",
"Custom_Web_Sim__c": "false",
"Finance_for_Non_Financials__c": "true"
}];
var mapping = {
"Custom_BA1__c": "Custom BA1",
"Custom_Web_Sim__c": "Custom Web Sim",
"Finance_for_Non_Financials__c": "Finance for Non Financials"
};
for(let record of records){
let products = Object.entries(record)
.filter(([k,v]) => v === "true") // filter the ones that are "true"
.map(([k,v]) => mapping[k]); // map them to the correct names
console.log(products);
}
&#13;
答案 1 :(得分:0)
在ES6中:
let products = records.map(record => {
let mapping = {
'Custom_BA1__c': 'Custom BA1',
'Custom_Web_Sim__c': 'Custom Web Sim',
'Finance_for_Non_Financials__c': 'Finance for Non Financials',
'Custom_Board__c': 'Custom Board'
}
return Object.keys(mapping).filter(key => record[key]).map(key => record[key])
}).flatten()
答案 2 :(得分:-1)
您将要创建二叉树。 对于每条记录,您将遵循二叉树中的特定路径。 当您触及底部时,树元素将具有单个字符串数组,您将通过一次调用进行连接。
每个树节点如下所示:
{
var str;
var strings;
var left, right;
}
您将分两步填充树。
第一次,在每个级别,你输入该级别的字符串。
root
left Node {str: 'Custom BA'} right Node {str: ''}
left Node {str: 'Custom Web Sim'} right Node {str: ''} left Node {str: 'Custom Web Sim'} right Node {str: ''}
第二次,在每个级别,你将放入该级别的聚集阵列。
root
left Node {strs: 'Custom BA'} right Node {strings: []}
left Node {strings: ['Custom BA', 'Custom Web Sim']} right Node {strings: ['Custom BA']} left Node {strings: ['Custom Web Sim']} right Node {strings: []}
现在,一旦填充了数组,给定任何记录,您将遍历树到底部。在每个级别,如果给定字段为“true”,则向左移动,否则向右移动。 您正在基本上将单个节点变量更新为当前节点。 到达底部后,您可以致电:
products.concat(node.strings)
为什么你要求的速度更快?因为每条记录不会进行100次推送,而是每条记录执行1次连续。
遍历树并不比你已经使用的if语句系列慢,你只是更新单个节点变量而不是使用每个'if'语句进行推送。
由于填充树所需的时间,由于记录数量较少,这可能需要更长时间。但随着记录数量的增加,这将会更快。
树将变大,2到田地数量的幂,这对于100个田地来说是非常大的。因此,您可能希望将其划分为多个树,每棵树有20个字段(每个树中2到20个大约几兆字节)。然后你只需按顺序遍历每棵树。
另一个优化是跳过填充树的第2步,而不是随着时间的推移填充。如果遍历树以获取记录并在最终节点处看到未填充“strings”数组,则重复相同的路径并填充它。