我在解决这个问题时遇到了麻烦,但让我们说一个包含这些元素的数组:
["apple", "banana", "pear", "kiwi", "orange"]
我想将此数组转移到:
["apple", "apple/banana", "apple/banana/pear", "apple/banana/pear/kiwi", "apple/banana/pear/kiwi/orange"]
我在JavaScript中需要它,但我不确定如何实现。
请注意,我目前正在使用 ES5 。
答案 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)
}
}, [])