如何将数组的上一个字符串与下一个字符串连接在一起?

时间:2018-07-04 10:16:09

标签: javascript arrays

我在解决这个问题时遇到了麻烦,但让我们说一个包含这些元素的数组:

["apple", "banana", "pear", "kiwi", "orange"]

我想将此数组转移到:

["apple", "apple/banana", "apple/banana/pear", "apple/banana/pear/kiwi", "apple/banana/pear/kiwi/orange"]

我在JavaScript中需要它,但我不确定如何实现。

请注意,我目前正在使用 ES5

6 个答案:

答案 0 :(得分:3)

这是您要执行的操作的简单实现:

ES5

var input = ["apple", "banana", "pear", "kiwi", "orange"];
var prev = '';
var output = input.map(function (el) {
  el = prev + el; prev = el + '/'; return el;
});
console.log(output);

ES6

let input = ["apple", "banana", "pear", "kiwi", "orange"];
let prev= '';
let output = input.map(  el => { el = prev + el; prev = el+'/'; return el})
console.log(output)

答案 1 :(得分:3)

Array.map()是针对这些问题的。

  

map()方法创建一个新数组,其结果是在调用数组中的每个元素上调用提供的函数。

在使用map浏览数组时,您可以使用join()slice()来连接原始数组中的某些值。

let input = ["apple", "banana", "pear", "kiwi", "orange"];

let output = input.map((el, index) => { 
   return (input[index-1]) ?  input.slice(0, index+1).join('/') : el;
})

输出:

Array [
  "apple",
  "apple/banana",
  "apple/banana/pear",
  "apple/banana/pear/kiwi",
  "apple/banana/pear/kiwi/orange"
]

有关这3行中发生的情况的更多解释:

// let's write it out.
let output = input.map((el, index) => { 
    // If there is a previous index of this array, we need to join it with this one
    if (input[index-1]) {
       // all previous values including this one
       let a = input.slice(0, index+1)
       // concatenate them all with a seperator
       let b = a.join('/');
       return b;
    } else {
       // if not just return the element
       return el;
    }
})

答案 2 :(得分:3)

  

您写道:请注意,我目前正在使用ES5。

不幸的是,有些人不再理解ES5是什么,并提出了ES6解决方案(带有箭头函数表达式,let语句和常量)。

s.configure('MyStyle.Treeview', rowheight=45) NewTree= ttk.Treeview(myApp, height=4, style='MyStyle.Treeview') 已添加到ECMAScript 5.1版本的ECMA-262标准中。所有现代浏览器(包括IE9)都完全支持它。

Array.map

答案 3 :(得分:1)

var array = ["apple", "banana", "pear", "kiwi", "orange"]
var all = [];
var str ="";
for(var i=0;i< array.length;i++)
{
   if(array[i-1]){
   str += array[i-1]+'/';
   all.push(str+array[i])
   }
   else all.push(array[i])
   
}
console.log(all);

答案 4 :(得分:1)

var fruits = ["apple", "pear", "orange", "banana"];
var i;
for( i=0; i<fruits.length; i++) {
    if (i == 0){
        continue;
    }
    var temp = fruits[i];
    fruits[i] = fruits[i-1] + "/" + temp;
}
for( i=0; i<fruits.length; i++) {
    print(fruits[i]);
}

您在这里!

要记住的要点:

  • 串联运算符
  • 用于循环
  • 继续声明
  • 数组

答案 5 :(得分:0)

.reduce的时间

这可以通过创建一个新数组,访问最后一个放置的字符串并附加一个'/'和一个下一个字符串current来实现。

yourArray.reduce((newArray, current) => newArray.concat(newArray.length > 0 ? newArray[newArray.length - 1] + '/' + current : current), [])

// long version:
yourArray.reduce((newArray, current) => {
  if (newArray.length > 0) {
    return newArray.concat(current)
  } else {
    const previousString = newArray[newArray.length - 1]
    return newArray.concat(previousString + '/' + current)
  }
}, [])