《JavaScript數組基礎編程題歸納》要點:
本文介紹了JavaScript數組基礎編程題歸納,希望對您有用。如果有疑問,可以聯(lián)系我們。
1.計算給定數組arr所有元素的和(number類型)
慣例循環(huán)
function sum(arr) {
var s = 0;
for (var i=arr.length-1; i>=0; i--) {
s += arr[i];
}
return s;
}
forEach()遍歷
function sum(arr) {
var s = 0;
arr.forEach(function(val, idx, arr) {
s += val;
}, 0);
return s;
};
reduce()歸并
function sum(arr) {
return arr.reduce(function(prev, curr, idx, arr){
return prev + curr;
});
}
eval()與join()
function sum(arr) {
return eval(arr.join("+"));
};
2.移除指定數組arr中所有與item相等的元素
不修改arr
//創(chuàng)建新數組,push()
function remove(arr, item) {
var result = [];
for(var i = 0; i < arr.length; i++){
if(arr[i] != item){
result.push(arr[i]);
}
}
return result;
}
// filter()迭代
function remove(arr, item) {
return arr.filter(function(x) { return x !== item; });
}
直接修改arr
function removeWithoutCopy(arr, item) {
for(var i = 0; i < arr.length; i++){
if(arr[i] == item){
arr.splice(i,1);
i--;
}
}
return arr;
}
3.在數組arr指定位置添加元素item(不修改arr)
在數組開頭添加
//****復制數組再添加(concat/slice + unshift/splice)****
function prepend(arr, item) {
var result = arr.concat(); //var result = arr.slice(0);
result.unshift(item); //result.splice(0,0,item);
return result;
}
//*****直接拼接****
//利用concat
function prepend(arr, item) {
return [item].concat(arr);
}
//使用push.apply
function prepend(arr, item) {
var newArr=[item];
[].push.apply(newArr, arr);
return newArr;
}
在數組末尾添加
//普通的迭代拷貝
var append = function(arr, item) {
var newArr = [];
for (var i = 0; i < arr.length; i++) {
newArr.push(arr[i]);
}
newArr.push(item);
return newArr;
};
// 使用slice淺拷貝+push組合
var append2 = function(arr, item) {
var newArr = arr.slice(0); // slice(start, end)淺拷貝數組
newArr.push(item);
return newArr;
};
//使用concat將傳入的數組或非數組值與原數組合并,組成一個新的數組并返回
var append3 = function(arr, item) {
return arr.concat(item);
};
在數組index處添加
//復制數組,在添加
function insert(arr, item, index) {
var newArr=arr.concat(); //var newArr=arr.slice(0);
//var newArr=[]; [].push.apply(newArr, arr);
newArr.splice(index,0,item);
return newArr;
}
//利用slice+concat
function insert(arr, item, index) {
return arr.slice(0,index).concat(item,arr.slice(index));
}
4.在數組arr指定位置刪除元素(不修改arr)
刪除數組開頭元素
//復制,再刪除
function curtail(arr) {
var newArr = arr.concat(); //var newArr = arr.join().split(',');
//var newArr=[]; [].push.apply(newArr, arr);
newArr.shift();
return newArr;
}
//利用filter
function curtail(arr) {
return arr.filter(function(v,i) {
return i!==0;
});
}
//利用slice
function curtail(arr) {
return arr.slice(1);
}
刪除數組末尾元素
function truncate(arr) {
return arr.slice(0,arr.length-1);
}
5.合并數組(不修改arr)
利用concat()
function concat(arr1, arr2) {
return arr1.concat(arr2);
}
利用 splice + push.apply
function concat(arr1, arr2) {
var newArr=arr1.slice(0);
[].push.apply(newArr, arr2);
return newArr;
}
6.統(tǒng)計數組arr中元素item呈現的次數
慣例循環(huán)
function count(arr, item) {
var sum = 0;
for(var i = 0; i < arr.length; i++){
if( arr[i] == item){
sum ++;
}
}
return sum;
}
利用filter()
function count(arr, item) {
return arr.filter(function(x){
return (x==item);
}).length
}
利用forEach()
function count(arr, item) {
var count = 0;
arr.forEach(function(x) {
x === item ? count++ : 0;
});
return count;
}
利用reduce()
function count(arr, item) {
var count = arr.reduce(function(prev, curr) {
return curr === item ? prev+1 : prev;
}, 0);
return count;
}
7.輸出數組arr中重復呈現過的元素
雙循環(huán)
function duplicates(arr) {
var result = [];
for(var i=0;i<arr.length;i++){
for(var j=i+1;j<arr.length;j++){
if(arr[i]==arr[j]){
result.push(arr[i]);
arr.splice(i,1);
arr.splice(j,1);
i=i-2;
j=j-2;
}
}
}
return result;
}
先排序,再循環(huán)
function duplicates(arr) {
var copy = arr.sort(),
result = [];
for(var i in copy){
if(copy[i]==copy[i-1] && result.indexOf(copy[i])==-1) result.push(copy[i]);
}
return result;
}
利用forEach()
function duplicates(arr) {
var result = [];
arr.forEach(function(elem){
if(arr.indexOf(elem) != arr.lastIndexOf(elem) && result.indexOf(elem) == -1){
result.push(elem);
}
});
return result;
}
8.數組去重
Array.prototype.uniq = function () {
var flag = false;
for(var i = 0; i < this.length; i++){
if(this[i] !== this[i]) flag = true;
for(var j = i+1; j < this.length;){
if(this[i] === this[j] ||(flag && this[j] !== this[j])){
this.splice(j,1);
}else{
j++;
}
}
}
return this;
}
前端學習交流的可以來這,這是我的群【571019044】承認的朋友可以加下,大家一起學習前端.
維易PHP學堂逐步分享更多《JavaScript數組基礎編程題歸納》相關教程。歡迎交流
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/9130.html