JS关于数组的问题

JavaScript010

JS关于数组的问题,第1张

你试试下面这种方法,只改动了一点:

<script type="text/javascript">

var student=new Array(5)//创建数组student

var i=0

var j=0

student[0]=new Array("李 林","男",20,"数学")//创建数组student[0]并赋值

student[1]=new Array("小 雪","女",19,"英语")//创建数组student[1]并赋值

student[2]=new Array("周 明","男",21,"语文")//创建数组student[2]并赋值

student[3]=new Array("李 涛","男",20,"数学")//创建数组student[3]并赋值

student[4]=new Array("清 清","女",18,"化学")//创建数组student[4]并赋值

document.write("学生的姓名、性别、年龄、所学专业现列举如下:"+"<p>")

var s=""

for ( i=0i<5i++) //使用for循环嵌套语句输出数组的值

{for (j=0j<4j++)

s=s+" "+student[i][j]//输出二维数组中的每个单元的值

s=s+'\n'}

alert(s)

</script>

想在这道题中练习的算法意义,试了一下。用了一些js的高级OO,呵呵

=======

<script>

var a=[1,1,1,2,3,3,3,3,4,5,6,6,6,6,6,7,8,8,8,8,9,10,12,12,13,15]

//下句排序如果原数据已排可以去掉

a=a.sort(function(x,y){return x-y})

var d=new Object()

function Record(e,p){

this.element=e

this.pos=p

}

document.writeln("处理前的数组:")

for(var i in a) document.write(a[i]+' ')

var c=1,r=new Record(a[0],0)

for(var i=1i<a.lengthi++){

if(a[i]==r.element) c++

else{

d[c]=(c in d)? d[c].concat(r):[r]

if(c>=3) for(var p=r.posp<ip++) a[p]=0

r=new Record(a[i],i)

c=1

}

}

document.writeln("<br/>处理后的数组:")

for(var i in a) document.write(a[i]+' ')

document.writeln('<br/>')

for(var k in d){

if(k>=3){

document.writeln(k+"个相同-数(位置): ")

for(var i in d[k])

document.writeln(d[k][i].element+'('+d[k][i].pos+') ')

document.writeln('<br/>')

}

}

</script>

=============

处理前的数组: 1 1 1 2 3 3 3 3 4 5 6 6 6 6 6 7 8 8 8 8 9 10 12 12 13 15

处理后的数组: 0 0 0 2 0 0 0 0 4 5 0 0 0 0 0 7 0 0 0 0 9 10 12 12 13 15

3个相同-数(位置): 1(0)

4个相同-数(位置): 3(4) 8(16)

5个相同-数(位置): 6(10)

==========

由于有起始位置,就没必要逐个打印位置。比如

“3个相同-数(位置): 1(0) ”

就知道1从位置0开始重复3次,0, 1, 2

题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。一个简单的数组遍历题。

答案:js语言:

functionFind(target, array){returnarray.some(arr =>arr.some(e =>e === target))}

解释:

外面的some方法是对每个一维进行遍历,里面的some方法是对每个一维的每一个元素进行遍历,判断是否严格等于要找的target元素,复杂度为n方。

 =>是es6语法中的arrow function

例:(x) =>x + 6 相当于

function(x){

    return x + 6

}

那么e =>e === target表示返回严格等于target的元素e

some()方法用于检测数组中的元素是否满足指定条件

some() 方法会依次执行数组的每个元素:

如果有一个元素满足条件,则表达式返回 true  , 剩余的元素不会再执行检测。

如果没有满足条件的元素,则返回false。

注意:  some() 不会对空数组进行检测。

注意:  some() 不会改变原始数组。

这里小记一下some以及类似的every,对比一下其他遍历方法

some() 有一个元素满足条件,即返回true

const a = [1, 2, 3]console.log(a.some(v =>v >5))  //falseconsole.log(a.some(v =>v <2))  //true

every() 所有元素满足条件,即返回true

const a = [1, 2, 3]console.log(a.every(v =>v <5))  //trueconsole.log(a.every(v =>v <2))  //false

filter() 返回包含满足条件元素的数组

const a = [1, 2, 3]

console.log(a.filter(v =>v <3))  // [1, 2]

map() 返回一个新数组

const a = [1, 2, 3]

console.log(a.map(v =>v + 5))  // [6, 7, 8]

forEach() 仅循环,无返回值,本质上相当于for

const a = [1, 2, 3]

a.forEach(v =>console.log(v))  // 1    2    3