JS能力测评经典题之数组

数组题

1.题目描述

找出元素 item 在给定数组 arr 中的位置 
输出描述:
如果数组中存在 item,则返回元素在数组中的位置,否则返回 -1

输入例子:
indexOf([ 1, 2, 3, 4 ], 3)
输出例子:
2
function indexOf(arr, item) {
	var index = -1;
    for( var i=0;i<arr.length;i++){
        if( arr[i] == item){
            index = i;
            break;
        }
    }
    return index;
}

  

2.题目描述

计算给定数组 arr 中所有元素的总和 
输入描述:
数组中的元素均为 Number 类型


输入例子:
sum([ 1, 2, 3, 4 ])

输出例子:
10
function sum(arr) {
	var osum = 0;
    for(var i=0;i<arr.length;i++){
    	osum += arr[i];    
    }
    return osum;
}

3.题目描述

移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr,结果返回新的数组 
输入例子:
remove([1, 2, 3, 4, 2], 2)

输出例子:
[1, 3, 4]
function remove(arr, item) {
	var newArr = new Array();
	alert(newArr.length);
    for( var i=0;i<arr.length;i++){
        if( arr[i]!=item){
            if(newArr.length==0){
            	newArr[0] = arr[i];
            } else {
            	newArr[newArr.length] = arr[i];
            }
        }
    }
    return newArr;
}

  

4.题目描述

移除数组 arr 中的所有值与 item 相等的元素,直接在给定的 arr 数组上进行操作,并将结果返回 
输入例子:
removeWithoutCopy([1, 2, 2, 3, 4, 2, 2], 2)
输出例子:
[1, 3, 4]
function removeWithoutCopy(arr, item) {
	
	for( var i=0;i<arr.length;i++){
		if( arr[i]==item){
			arr.splice(i,1);
			i=i-1;
		}
	}
	return arr;
} 

 

5.题目描述

在数组 arr 末尾添加元素 item。不要直接修改数组 arr,结果返回新的数组 
输入例子:
append([1, 2, 3, 4],  10)
输出例子:
[1, 2, 3, 4, 10]
function append(arr, item) {
	var newArr = new Array();
	var len = arr.length;
	for(var i=0;i<len;i++){
		newArr[i] = arr[i];
	}
	newArr[len] = item;
	return newArr;
}

坑点:如果你直接 var newArr = arr;就错了,因为newArr和arr指的是同一块内存,你修改了newArr其实也修改了arr,和题目意思相背离.而new Array()是新建一个对象,新开辟一块内存,两者互不影响.

考点:面向对象思想,类和对象.对象是类的实例化,对象之间的简单赋值,只是引用的赋值,所指的内存是没有变的


6.题目描述

合并数组 arr1 和数组 arr2。不要直接修改数组 arr,结果返回新的数组 
输入例子:
concat([1, 2, 3, 4], ['a', 'b', 'c', 1])

输出例子:
[1, 2, 3, 4, 'a', 'b', 'c', 1]
function concat(arr1, arr2) {
	var newArr = new Array();
	var i=0;
	for(i=0;i<arr1.length;i++) {
		newArr[i] = arr1[i];
	}
	for( var j=0;j<arr2.length;j++){
		newArr[i+j] = arr2[j];
	}
	return newArr;
}

  

7.题目描述

在数组 arr 的 index 处添加元素 item。不要直接修改数组 arr,结果返回新的数组 
输入例子:
insert([1, 2, 3, 4], 'z', 2)

输出例子:
[1, 2, 'z', 3, 4]
function insert(arr, item, index) {
	var newArr = new Array();
    for( var i=0;i<index;i++){
        newArr[i] = arr[i];
    }
    newArr[index] = item;
    for( var i= index;i<arr.length;i++) {
        newArr[i+1] = arr[i];
    }
    return newArr;
}

  

题目描述

统计数组 arr 中值等于 item 的元素出现的次数 
输入例子:
count([1, 2, 4, 4, 3, 4, 3], 4)
输出例子:
3
function count(arr, item) {
	var number = 0;
	for(var i=0;i<arr.length;i++) {
		if(arr[i]==item){
			number++;
		}
	}
	return number;
}

  坑点:仅对自己而言,一开始想到了Array.indexOf(item,start);但是这个函数返回的是找到item首次出现的位置,若找不到返回-1.

 

8.题目描述

找出数组 arr 中重复出现过的元素 
输入例子:
duplicates([1, 2, 4, 4, 3, 3, 1, 5, 3]).sort()
输出例子:
[1, 3, 4]
function duplicates(arr) {
	var newArr = new Array();
	var flag =0;
	var k=0;
	for(var i=0;i<arr.length;i++) {
		for( var j=i+1;j<arr.length-1;j++) {
			if( arr[i]==arr[j]) {
				for( k=0;k<newArr.length;k++) {
					if(newArr[k]==arr[i]) 
					flag = 1;
				}
				if( flag==0) {
					newArr[k] = arr[i];
					k++;
				}
			}
		}
	}
	return newArr;
}

  

posted @ 2017-03-21 22:12  进阶乐园  阅读(1195)  评论(0编辑  收藏  举报