2

我想用逗号分隔的所有项目的名称动态创建一个字符串。

var itemName = '';
for (var i=0; i < itemArray.length; i++) {
    itemName = itemName+","+itemArray[i].name;
}

假设,我有 3 个名称为 - 的项目Shoe, Jeans & Shirt。我希望将变量 itemName 保存为Shoe,Jeans,Shirt

下面是 itemArray

[{"name":"shoe","size":"3","brand":"lee"},{"name":"Jeans","size":"5","brand":"le‌​e"}...] 

当我使用上面的代码时,它会像这样,Shoe,Jeans,Shirt

避免第一个逗号的有效方法是什么?

JavaScript 中有没有类似于${stat.first?'':','}jstl 的方法?

4

3 回答 3

5

使用Array.mapArray.join

注意:Array.map是 ECMA5,但有 polyfils 可用。

Javascript

var itemArray = [{
        name: "Shoe"
    }, {
        name: "Jeans"
    }, {
        name: "Shirt"
    }],
    itemName = itemArray.map(function (item) {
        return item.name;
    }).join(",");

console.log(itemName);

输出

Shoe,Jeans,Shirt 

jsfiddle

于 2013-09-29T11:41:06.637 回答
1

有两种方法可以解决这个问题。

方式1:做你正在做的事情。只需记住删除字符串的第一个字符:

function join(array, delimiter, name) {
    var index = 0, length = array.length, string = "";
    while (index < length) string += delimiter + array[index++][name];
    return string.slice(1);
}

方式2:本质上这个解决方案与第一个相同。然而,它利用了mapand join

function join(array, delimiter, name) {
    return array.map(function (item) {
        return item[name];
    }).join(delimiter);
}

第一种方式比第二种方式快。然而,第二种方式更具可读性。join无论哪种方式,您现在都可以通过简单地调用如下方式来做您想做的事情:

join(itemArray, ",", "name");

希望有帮助。

于 2013-09-29T12:12:27.817 回答
-2

您需要,在第一项写入变量后添加字符,并且不要,在迭代数组的最后一个元素上写入字符

itemArray = [
                 {
                     "name" : "shoe",
                     "size" : "3",
                     "brand" : "lee"
                 }, {
                     "name" : "Jeans",
                     "size" : "5",
                    "brand" : "le‌​‌​e"
                 }
              ];

var itemName = '';
var sSeparator = ',';
var i;
for(i=0; i<itemArray.length; i+=1){

   itemName += itemArray[i].name;

   if(i < itemArray.length - 1){
       itemName += sSeparator;
   }
}
于 2013-09-29T11:37:00.583 回答