简体   繁体   English

更有效的字符串创建方式

[英]More efficient way of string creation

I have the following object and need this string: 我有以下对象,需要这个字符串:

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 
   } 
}

The object and the string (including length) are subject to change. 对象和字符串(包括长度)可能会发生变化。

I create the string like this (using lodash): 我像这样创建字符串(使用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> 

I would like to avoid the map() /array functions at the end. 我想在最后避免map() /数组函数。 Does someone find an easier way to create above string from the object? 有人找到一种更简单的方法从对象创建上面的字符串吗?

I don't know if this is easier but you get a string at the end and its vanilla javascript. 我不知道这是否更容易,但你最后得到一个字符串和它的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM