在Javascript中将键值对操作为字符串

3
我需要帮助来操作一个值对数组,以返回特定布局的字符串。 这是我想要实现的字符串:
'&test=id:1111|na:shoes|ca:shoe&test=id:2222|na:top|ca:tops'

这是我试图将其转换为字符串的数组。
var prodlist = 
[
    {
        name: 'shoe',
        sku: '1111',
        category: 'shoes'
    },
    {
        name: 'top',
        sku: '2222',
        category: 'tops'
    }
]

这是我尝试过的方法。

我将“deleteme”添加到数组中,以为稍后可以在脚本中进行替换。

function(){ 
    var prods = prodlist;
    var array = [];
    for (var i = 0; i < prods.length; i++) {
        var sku = (prods[i]['sku']);
        var name = (prods[i]['name']);
        var cat = (prods[i]['category']);

        array.push({
            deleteme: &test=id,
            id: sku,
            na: name,
            ca: cat,
        });
    }
    var newarray = array.toString();
    return newarray;
}

此函数目前返回 '[object Object],[object Object]'。非常感谢您的帮助。谢谢。

1
你正在将对象推入数组并调用数组的toString方法。这也会调用对象的toString,它返回"[object Object]"。你应该将字符串推入数组,而不是对象,例如array.push('&test=id' + sku + '|na:' + name + ...). 然后使用join.('')代替toString,否则字符串将与默认逗号连接。 - RobG
@RobG 你说得完全正确... 真是太棒了!非常感谢。 - paco
2个回答

2

快速简便

function prods() {
     var prods = prodlist;
     var array = [];
     for (let product of prods)
        array.push('test=id:' + product.sku+ '|na:' + product.name + '|ca:' + product.category);
     return '&' + array.join('&');
}

1
为什么不直接将 '&' 放入您的 .push() 字符串中呢?(然后 join('') - nnnnnn
@nnnnnn 很好的观点,那样做完全可行。就性能而言,据我所知并不重要。 - Hurricane Development
1
是的,这并不重要,只是会使返回语句稍微更整洁一些。 - nnnnnn

1
这个怎么样?
var prodlist = 
[{name: 'shoe',
sku: '1111',
 category: 'shoes'},
 {name: 'top',
 sku: '2222',
 category: 'tops'}]

var strTemplate = "&test=id:%sku%|na:%name%|ca:%category%"

prodlist.map( function(obj){
   return strTemplate.replace(/%(\w+)%/g, function($1, $2) {
     return obj[$2]
   })
}).join('')

//returns
// "&test=id:1111|na:shoe|ca:shoes&test=id:2222|na:top|ca:tops"

或者ES6版本(根据nnnnnn的建议进一步简化)
prodlist.map( obj => strTemplate.replace(/%(\w+)%/g, ($1, $2) => obj[$2])).join('')

1
或者简洁的 ES6(无需 return{}):prodlist.map( obj => strTemplate.replace(/%(\w+)%/g, ($1, $2) => obj[$2])).join('') - nnnnnn
你说得对,我太匆忙了...让我来修改一下。发现得真好! :-) - james emanon
1
P.S.:我忘了说你很好地使用了 .replace()。+1。 - nnnnnn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接