第一题 查找数组元素的位置
1.indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。
如果要检索的字符串值没有出现,则该方法返回 -1。
语法:stringObject.indexOf(item) //stringObject为数组或字符串;item为要检测的字母或子字符串
第二题 数组求和
1、不考虑算法复杂度,递归
slice() 方法可从已有的数组中返回选定的元素。
slice()方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。
array.slice(start, end) // 不包含end
function sum(arr) {
var len = arr.length;
if(len == 0)
return 0;
else if(len == 1)
return arr[0];
else
return arr[0] + sum(arr.slice(1));
}
2.遍历求和
function sum(arr) {
var sum = 0;
for(var i = 0; i < arr.length; i++){
sum += arr[i];
}
return sum;
}
第三题:移除数组中的元素,不要直接修改数组 arr,结果返回新的数组
push()向数组的末尾添加一个或多个元素,并返回新的长度。
function remove(arr, item) {
var a = [];
for(var i=0; i < arr.length; i++){
if(arr[i] != item){
a.push(arr[i]);
}
}
return a;
}
第四题:移除数组 arr 中的所有值与 item 相等的元素,直接在给定的 arr 数组上进行操作,并将结果返回
slice() 方法可从已有的数组中返回选定的元素。
该方法并不会修改数组,而是返回一个子数组。如果想删除数组中的一段元素,应该使用方法 Array.splice()。
function removeWithoutCopy(arr, item) {
while (arr.indexOf(item) !=- 1) {
arr.splice(arr.indexOf(item),1);
}
return arr;
}
用while循环判断item 是否存在,若存在则删除,若不存在,则return arr.
比较
splice()方法也是一个强大的数组方法!!!主要用途是:向数组的中部插入项。
1、删除,指定2个参数:要删除的第一项的位置和要删除的项数。
如:splice(0,2)会删除数组中的前两项。
2、插入,指定3个传参数:起始位置、0(要删除的项数)、要插入的项。
如:splice(2,0,"red","green")从位置2开始插入字符串。
3、替换,向指定位置插入项,并删除指定位置的项。指定3个参数:起始位置、要删除的项数、要插入的项。
如:splice(2,1,"red","black")删除位置2的项并从位置2 开始插入字符串。
第五题:在数组 arr 末尾添加元素 item。不要直接修改数组 arr,结果返回新的数组
1.slice(0)浅拷贝,表示将数组拷贝一次
如果slice()方法只有一个参数,表示返回从该参数指定位置开始到数组末尾的所有项;
若有两个参数,返回从第一个参数指定位置到第二个参数指定位置,但不包括结束位置项。
该方法不会影响原始数组
function append(arr, item) {
var newArr = arr.slice(0);
newArr.push(item);
return newArr;
}
第六题:删除数组 arr 最后一个元素。不要直接修改数组 arr,结果返回新的数组
unction truncate(arr) {
return arr.slice(0,arr.length-1);
}
第七题:在数组 arr 开头添加元素 item。不要直接修改数组 arr,结果返回新的数组
1.concat() 方法用于连接两个或多个数组。
该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
function prepend(arr, item) {
return [item].concat(arr);
}
第八题:统计数组 arr 中值等于 item 的元素出现的次数
1.遍历的方法
function count(arr, item) {
var acount = 0;
for (var i=0; i
acount++;
}
}
return acount;
}
2.filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
注意: filter() 不会对空数组进行检测。
注意: filter() 不会改变原始数组。
function count (arr, item ) {
var count = arr. filter(function(a) {
return a === item ; //返回true的项组成的数组, a表示当前元素的值
});
return count.length;
}
3.map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
map() 方法按照原始数组元素顺序依次处理元素。
注意: map() 不会对空数组进行检测。
注意: map() 不会改变原始数组。
function count(arr,item){
var count = 0;
arr.map(function(a){
if (a == item) {
count++
}
});
}
第九题:找出数组 arr 中重复出现过的元素
forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。
注意: forEach() 对于空数组是不会执行回调函数的。
lastIndexOf() 方法可返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索。
indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。
function duplicates(arr) {
var result = [];
arr.forEach(function(e){
if(arr.indexOf(e) != arr.lastIndexOf(e) && result.indexOf(e) ==-1){ // result.indexOf(e) ==-1 避免新数组中数据重复
result.push(e);
}
});
return result;
}
第十题:为数组 arr 中的每个元素求二次方。不要直接修改数组 arr,结果返回新的数组
function square(arr) {
return arr.map(function(item){
return item*item;
})
}
function square(arr){
var a = [];
arr.forEach(function(e){
a.push(e*e);
});
return a;
}