[英]More efficient way of string creation
我有以下對象,需要這個字符串:
product_name,@dummy1,@dummy2,seller_sku,@price,item_quantity,@dummy6,@dummy7,@dummy8,@dummy9,@dummy10,@dummy11,@dummy12,@dummy13,@dummy14,@dummy15,@dummy16,@dummy17,@dummy18,@dummy19,@dummy20,@dummy21,@dummy22,@dummy23,@dummy24,@dummy25,fulfillment_channel
{
countFields: 27,
fields:
{ product_name: 0,
seller_sku: 3,
price: 4,
item_quantity: 5,
fulfillment_channel: 26
}
}
對象和字符串(包括長度)可能會發生變化。
我像這樣創建字符串(使用lodash):
function tableString(fields){ var obj = _.invert(fields.fields); obj.length = fields.countFields; var values = Array.prototype.slice.apply( obj ); var arr = _.merge(new Array(fields.countFields),values).map(function(val,i){ if (val == 'price' || !~values.indexOf(val)) { if (val == 'price') { return '@price'; } return '@dummy' + i; } return val; }); return arr.join(','); } var first = { countFields: 27, fields: { product_name: 0, seller_sku: 3, price: 4, item_quantity: 5, fulfillment_channel: 26 } } console.log(tableString(first));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.min.js"></script>
我想在最后避免map()
/數組函數。 有人找到一種更簡單的方法從對象創建上面的字符串嗎?
我不知道這是否更容易,但你最后得到一個字符串和它的vanilla javascript。
function tableString(fields){
var reversedFields = {};
for(var key in fields.fields){ // we swapped key and value
reversedFields[fields.fields[key]] = key;
}
for(var i=0,x=fields.countFields-1,result = "";i<fields.countFields;i++){
if(reversedFields[i]){
result += (reversedFields[i] == 'price' ? '@price' : reversedFields[i]);
} else {
result += '@dummy' + i;
}
if(i < x){
result += ",";
}
}
return result;
}
var res = tableString({
countFields: 27,
fields:{
product_name: 0,
seller_sku: 3,
price: 4,
item_quantity: 5,
fulfillment_channel: 26
}
});
// result product_name,@dummy1,@dummy2,seller_sku,@price,item_quantity,@dummy6,@dummy7,@dummy8,@dummy9,@dummy10,@dummy11,@dummy12,@dummy13,@dummy14,@dummy15,@dummy16,@dummy17,@dummy18,@dummy19,@dummy20,@dummy21,@dummy22,@dummy23,@dummy24,@dummy25,fulfillment_channel
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.