1.找出元素 item 在给定数组 arr 中的位置数组
function indexOf(arr, item) {
//先判断当前浏览器是否支持indexOf方法
if (Array.prototype.indexOf){
return arr.indexOf(item);
} else {
for (var i = 0; i < arr.length; i++){
if (arr[i] === item){
return i;
}
}
}
return -1;
}
复制代码
2.计算给定数组 arr 中全部元素的总和浏览器
2.1 普通玩家版bash
function sum(arr) {
let res = 0;
for(let i=0;i<arr.length;i++){
res += arr[i];
}
return res;
}
复制代码
2.2 forEach版本app
function sum(arr) {
let res = 0;
arr.forEach(function (curr,index,arr) {
res += curr;
});
return res;
}
console.log(sum([1, 2, 3, 4, 5])); //15
复制代码
注意点:forEach() 为每一个数组元素执行callback函数;不像 map() 或者 reduce(),它老是返回 undefined 值,而且不可链式调用。函数
function sum(arr) {
let res = 0;
arr.forEach(function (curr,index,arr) {
return res += curr;
});
}
console.log(sum([1, 2, 3, 4, 5])); //返回undefined
复制代码
2.3 ES6玩家版ui
function sum(arr) {
return arr.reduce((prev,curr) => prev + curr,0)
}
//调试部分
console.log(sum([1, 2, 3, 4])); //10
复制代码
3.移除数组 arr 中的全部值与 item 相等的元素。不要直接修改数组 arr,结果返回新的数组spa
3.1 菜鸡(我写的)版本prototype
若是数组中的元素不和item相等,把数组元素添加到新的数组中调试
function remove(arr, item) {
let res = [];
for(let i=0;i<arr.length;i++){
if(arr[i] !== item){
res.push(arr[i]);
}
}
return res;
}
复制代码
3.2 菜鸡版本的另外一种实现code
若是数组中的元素和item相等,就再也不往下执行代码
function remove(arr, item) {
let res = [];
for(let i=0;i<arr.length;i++){
if(arr[i] === item) continue;
res.push(arr[i]);
}
return res;
}
复制代码
3.3 slice&splice混用
slice()
方法可用于截取字符串,且返回的是截取内容(新的数组),咱们能够传递参数0截取所有元素splice()
切割数组,splice()
会改变原数组function remove(arr, item) {
let newArr = arr.slice(0); //
for(let i=0;i<newArr.length;i++){
if(newArr[i] === item){
newArr.splice(i,1);
i--;
}
}
return newArr;
}
复制代码
3.4 ES6玩家版(别人写的)
filter()
方法建立一个新的数组,新数组中的元素是经过检查指定数组中符合条件的全部元素。返回 返回true的项组成的数组
function remove(arr,item){
return arr.filter(ele => ele !== item);
}
复制代码
4.移除数组 arr 中的全部值与 item 相等的元素,直接在给定的 arr 数组上进行操做,并将结果返回
4.1 直接在给定的数组上操做,则可使用splice()
方法,注意splice()
方法删除元素后,数组长度也变化了,须要执行i--
避免跳过元素。
function removeWithoutCopy(arr, item) {
for(let i=0;i<arr.length;i++){
if (arr[i] === item){
arr.splice(i,1);
i--;
}
}
return arr;
}
复制代码
4.2 倒着删除,不用考虑数组长度变化
function removeWithoutCopy(arr, item) {
for(let i=arr.length-1;i>=0;i--){
if(arr[i] === item){
arr.splice(i,1);
}
}
return arr;
}
复制代码
5.在数组 arr 末尾添加元素 item。不要直接修改数组 arr,结果返回新的数组
5.1 利用slice()
建立一个新数组,利用push添加到最末尾
function append(arr, item) {
let newArr = arr.slice(0);
newArr.push(item);
return newArr;
}
复制代码
5.2 利用slice()
建立一个新数组,数组[数组长度] = 新元素
function append(arr, item) {
let newArr = arr.slice(0);
newArr[newArr.length] = item;
return newArr;
}
复制代码
5.3 建立一个新的空数组,for循环依次添加
function append(arr, item){
let newArr = [];
for(let i=0;i<arr.length;i++){
newArr.push(arr[i]);
}
newArr.push(item);
return newArr;
}
复制代码
5.4 利用concat()
直接链接起来
function append(arr, item) {
return arr.concat(item);
}
复制代码
6.删除数组 arr 最后一个元素。不要直接修改数组 arr,结果返回新的数组
6.1
function truncate(arr, item) {
let newArr=[];
for(var i=0;i<arr.length-1;i++){
newArr.push(arr[i]);
}
return newArr;
}
复制代码
6.2
function truncate(arr) {
return arr.slice(0,-1);
}
复制代码
6.3 利用filter
//利用filter
function truncate(arr) {
return arr.filter(function(v,i,ar) {
return i!==ar.length-1;
});
}
复制代码
6.4
function truncate(arr) {
let newArr = arr.concat();
newArr.pop();
return newArr;
}
复制代码
6.5
//利用push.apply+pop
function truncate(arr) {
let newArr=[];
[].push.apply(newArr, arr);
newArr.pop();
return newArr;
}
复制代码
6.6 注意:每一个元素的数据类型会变成字符型
function truncate(arr) {
var newArr = arr.join().split(',');
newArr.pop();
return newArr;
}
复制代码