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;
}
浙公网安备 33010602011771号