解构数组中的元素,然后再次加入

时间:2018-01-27 20:20:42

标签: javascript arrays ecmascript-6

我正在尝试为数组中的每个单词添加字母“x”。将它添加到数组中的每个元素是没有问题的,但在我的情况下,第二个元素由两个单词组成。

根据我的理解,它应以某种方式从'bar','baz'解构为x,然后将bar添加到baz'barx',然后{{{ 1}}和'bazx'应该合并到'barx bazx'。但我不确定。

var array = ['foo', 'bar baz'];

// Pass a function to map
const map = array.map(word => word + 'x');

alert(map);
// Desired output: foox,barx bazx
// For obvious reasons, current output is foox,bar bazx (with no x after bar).

5 个答案:

答案 0 :(得分:2)

您可以拆分项目并为每个拆分元素添加'X',然后再次加入项目以进行映射。

const plusX = s => s + 'x';

var array = ['foo', 'bar baz'],
    result = array.map(
        s => s
            .split(' ')
            .map(plusX)
            .join(' ')
    );
    
console.log(result);

答案 1 :(得分:1)

这取决于你对“单词”的定义。例如。是'a + b'是单个单词,两个单词'a'和'b'还是三个单词'a','+'和'b'?

一个简单的解决方案是匹配正则表达式模式并将“x”添加到所有匹配的单词:

const array = ['foo', 'bar baz'];

// Append 'x' to all words:
const map = array.map(str => str.replace(/\w+/g, word => word + 'x'));

console.log(map);

这里,正则表达式\w+匹配仅由字符a-z,A-Z,0-9和下划线_组成的单词。所以它会用'ax + bx'代替'a + b'。

答案 2 :(得分:1)

设置分隔符并拆分每个元素



const array = ["foo", "bar baz"];

const separator = " ";

// Pass a function to map
const map = array.map(word =>
  word
    .split(separator)
    .map(element => `${element}x`)
    .join(separator)
);

alert(map);




答案 3 :(得分:1)

您非常接近,只需添加 parser = argparse.ArgumentParser(description='Change the option prefix characters',prefix_chars='-+',) 即可将word.replace(" ", "x ")插入上一个字词的末尾和空格之前:



x




答案 4 :(得分:1)

您可以在Array.from()使用"x",定义thisArg作为默认参数,在RegExp使用/(\w$)|(\s)/g .replace()来匹配单词字符字符串或空格字符的结尾



var array = ['foo', 'bar baz'];

// Pass a function to map
const map = Array.from(array, (word, index, prop = "x") =>
              word.replace(/(\w$)|(\s)/g, (_, p1, p2) => 
                p1 ? `${p1}${prop}` : `${prop}${p2}`));

console.log(map);