题目来源:https://www.codewars.com/kata/54e6533c92449cc251001667/train/javascript
有参考:https://www.jianshu.com/p/cae3daf4b310
题目内容:
Implement the function unique_in_order which takes as argument a sequence and returns a list of items without any elements with the same value next to each other and preserving the original order of elements.
For example:
uniqueInOrder('AAAABBBCCDAABBB') == ['A', 'B', 'C', 'D', 'A', 'B']
uniqueInOrder('ABBCcAD') == ['A', 'B', 'C', 'c', 'A', 'D']
uniqueInOrder([1,2,2,3,3]) == [1,2,3]
自己的答案:
var uniqueInOrder=function(val){
if (typeof val === 'string') {
arr = val.split('');
} else {
arr = val;
}
if (arr.length === 0) return [];
let preItem = arr[0];
const result = [arr[0]];
const add = arr.filter(item => {
if (item === preItem) return false;
preItem = item;
return true;
});
return result.concat(add);
}
很笨拙的方法。提交以后看到一个很牛的答案:
var uniqueInOrder=function(iterable){
return [...iterable].filter((a, i) => a !== iterable[i-1])
}
之后去看了一下扩展运算符的用法。
参考:https://blog.csdn.net/qq_30100043/article/details/53391308
const func=(val)=>{
console.log([...val]);
};
func('hfwioe'); //如果传进去的参数是个字符串
// 输出结果: ["h", "f", "w", "i", "o", "e"]
func(['a','b','c']); //如果传进去的参数是个数组
// 输出结果: ["a", "b", "c"]
1.用于合并数组
// ES5
[1, 2].concat(more)
// ES6
[1, 2, ...more]
var arr1 = ['a', 'b'];
var arr2 = ['c'];
var arr3 = ['d', 'e'];
// ES5 数组合并
arr1.concat(arr2, arr3);
// [ 'a', 'b', 'c', 'd', 'e' ]
// ES6 数组合并
[...arr1, ...arr2, ...arr3]
// [ 'a', 'b', 'c', 'd', 'e' ]
2.用于解构赋值
const [first, second,...rest] = [1, 2, 3, 4, 5];
console.log(first,second,rest);
// 打印结果: 1 2 [3, 4, 5]