小白刚开始学javascript的时候,对splice()
/slice()
/split()
总是混淆
借助这样一道题为例搞懂这三种方法
给你一个 打乱顺序 的句子 s ,它包含的单词不超过 9 个,请你重新构造并得到原本顺序的句子。
比方说,句子 “This is a sentence” 可以被打乱顺序得到 “sentence4 a3 is2 This1” 或者 “is2 sentence4 This1 a3” 。
输入:s = “is2 sentence4 This1 a3”
输出:“This is a sentence”
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sorting-the-sentence
arrayObject.splice(index,howmany,item1,.....,itemX)
- index必需 表示将要添加/删除元素的位置
- howmany必需 表示删除多少个元素,0表示不删除元素
- item1,…,itemX可选 表示添加的元素
返回被删除的部分组成的数组(没有就返回空数组),改变原数组
arrayObject.slice(start,end)
- start 必需 表示开始截取的位置
- end 可选,表示截取结束的位置(不包括arr[end]这个元素)
两个参数的负数都表示从后往前,-1表示最后一个,-2表示倒数第二个
返回截取部分的数组,不改变原数组
stringObject.split(separator,howmany)
- separator 必需 分割的边界处 如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割。
这里用空格表示按空格分割为数组 - howmany 可选。指定返回的数组的最大长度。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。
返回一个数组
/**
* @param {string} s
* @return {string}
*/
var sortSentence = function (s) {
let arr = s.split(' ');
let res = new Array(arr.length);
for (let i = 0; i < arr.length; i++) {
// splice(index,1,要插入的元素)
// 注意 第二个参数不能是0,0表示多插入一个元素!! 1表示“替换该位置的元素”
// arr[i][arr[i].length - 1]*1 表示元素最后的数字作为索引
// arr[i].split('').slice(0,-1).join('')+' '
// 表示单个元素转换为数组之后截取除了最后一位数字的部分再转换为字符串
// 并在每个单词之后加上空格存入res
res.splice(arr[i][arr[i].length - 1]-1, 1, arr[i].split('').slice(0, -1).join('') + ' ')
}
// trim()方法去除字符串首尾的空格
return res.join('').trim()
};