shift
// 刪除并返回?cái)?shù)組的第一個(gè)元素。
Array.prototype.shift = function () {
let firstItem = this[0]
this.splice(0,1)
return firstItem
}
var fruits = ["Banana", "Orange", "Apple", "Mango"];
console.log(fruits.shift())
console.log(fruits)
slice
Array.prototype.slice = function (start = 0, end = this.length) {
if (!isNaN(start) && !isNaN(end)) {
if (Number(start) < 0) {
start = this.length + Number(start)
} else {
start = Number(start)
}
let arr = []
for (let i = start; i < Number(end); i++) {
arr.push(this[i])
}
return arr
} else {
throw new Error("傳數(shù)字")
}
}
console.log([1, 2, 3].slice()) //[ 1, 2, 3 ]
var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
console.log(fruits.slice(1,3)) //[ 'Orange', 'Lemon' ]
some
Array.prototype.some = function(f){
if(f&&typeof f === "function"){
for(let i=0;i<this.length;i++){
if(f(this[i],i,this)){
return true
}
}
return false
}else{
throw new Error("傳函數(shù)")
}
}
var ages = [3, 10, 18, 20];
function checkAdult(age) {
return age >= 18;
}
console.log(ages.some(checkAdult)) //true
sort
//小寫大于大寫
console.log("a" > "A") //true
console.log("a" > "z") //false
console.log("a" > "Z") //true
//數(shù)字和字母比較起來(lái)都是false
console.log("a" > 100) //false
console.log("a" > 0) //false
console.log("a" > -111111) //false
console.log(-111111 > "a") //false
console.log(["a", "A", 100, 11, "Z", "z", 33].sort())
//[
// 100, 11, 33,
// 'A', 'Z', 'a',
// 'z'
// ]
// 默認(rèn)sort內(nèi)處理是字母大于數(shù)字
// 使用數(shù)字排序颗圣,你必須通過(guò)一個(gè)函數(shù)作為參數(shù)來(lái)調(diào)用!!!
// 所以sort不傳的話只對(duì)字母進(jìn)行排序
// a-b為升序
Array.prototype.sort = function (f) {
if (f && typeof f === "function") {
for (let i = 0; i < this.length; i++) {
for (let j = 0; j < this.length; j++) {
if (f(this[j],this[i] ) > 0) {
let temp = this[j]
this[j] = this[i]
this[i] = temp
}
}
}
} else {
//不細(xì)處理了屁使,大概思路:空數(shù)組a收集英文在岂,原數(shù)組去掉蛮寂,將a排序,再類似concat 插入尾部
}
}
var points = [40,100,1,5,25,10];
points.sort(function(a,b){return a-b}); //[ 1, 5, 10, 25, 40, 100 ]
console.log(points)
unshift
Array.prototype.unshift = function(){
let length = arguments.length
this.length+=length
for(let i=this.length-1;i>0;i--){
this[i] = this[i-length]
}
for(let i=0;i<length;i++){
this[i] = arguments[i]
}
return this.length
}
let arr = [1,2,3]
console.log(arr.unshift(4,5,6,7)) //7
console.log(arr)
// [
// 4, 5, 6, 7,
// 1, 2, 3
// ]
splice(比較復(fù)雜)
//JavaScript通過(guò)設(shè)置數(shù)組的length屬性來(lái)截?cái)鄶?shù)組是惟一一種縮短數(shù)組長(zhǎng)度的方法.
Array.prototype.splice = function (index,howmany) {
if(!isNaN(index)){
for(let i=0;i<this.length;i++){
if(Number(index)===i){
let length =this.length-Number(index)
if(!isNaN(howmany)){
length = howmany
}else{
throw new Error("數(shù)字")
}
for(let j=Number(index);j<Number(index)+length;j++){
//左移
for(let k=Number(index)+1;k<this.length;k++){
this[k-1] = this[k]
}
this.length--
}
//添加尾項(xiàng)
for(let l = 2;l<arguments.length;l++){
this[Number(index)+l-2] = arguments[l]
console.log(Number(index)+length+l-2)
}
}
}
}else{
throw new Error("必傳且數(shù)字")
}
}
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(2,2,"oh","baby");
console.log(fruits)