JS / JQuery - 根据值拆分和映射逗号分隔字符串和连接结果

时间:2018-03-27 22:29:55

标签: javascript jquery

ajax成功返回一个逗号分隔的字符串(1,2,3),我将其拆分并映射以获取某些选择选项的.text()...像这样:

JS:

success:function(data){

    console.log(data.added.allocatedTo);

    var selectText;
    var joinText;
    var stringResult = data.added.allocatedTo;
    var splitResult = stringResult.split(",").map(function(port) {

        selectText = $('.select-portfolio option[value='+port+']').text();

        joinText += selectText+',';

    }); 

    console.log(joinText);
}

以上内容在控制台中提供了以下内容:

控制台:

1,2,3
undefinedPortfolio Test 01,
undefinedPortfolio Test 01,Portfolio Test 02,
undefinedPortfolio Test 01,Portfolio Test 02,Portfolio Test 03,                     

...但我想要的是:

Portfolio Test 01, Portfolio Test 02, Portfolio Test 03

......我怎么能得到这个?

3 个答案:

答案 0 :(得分:1)

.map希望您从提供给它的函数内部返回一个值:

const joinText = stringResult.split(",").map(function(port) {
  return $('.select-portfolio option[value=' + port + ']').text();
});
console.log(joinText);

(您目前正在使用.map,例如forEach,这不适合您要实现的目标)

答案 1 :(得分:1)

数组上的map方法使用给定函数将新数组返回到" map"该数组中的元素(值)到结果数组中的新元素(值)。

您可以在数组上使用join方法来反转拆分。

所以你想要的是这个:

const joinText = stringResult.split(",")
                   .map(port => $('.select-portfolio option[value=' + port + ']').text())
                   .join(", ");
console.log(joinText);

答案 2 :(得分:0)

显然,您没有将joinText初始化为空字符串。只需将其声明为var即可将其值初始化为undefined。当您向其添加字符串时,会将其转换为字符串"undefined",因此您现在拥有"undefined" + "Portfolio Test 01,"

要修复,您可以在声明时初始化它:

var joinText = '';

**编辑:其他答案是正确的,因为您使用.map方法作为.forEachfor循环;但是,我只是指出将undefined文本放在字符串输出前面的内容。