ps新建图片时,点开ps改变图像颜色RGB颜色就停止工作,为什么?而且还显示程序错误

当前位置:
JS中取二维数组中最大值的方法汇总
JS中取二维数组中最大值的方法汇总
11:13:58 | 6 次阅读 | 评论: 0 | 来源: 网友投递
Javascript 是一种由Netscape的LiveScript发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
本文通过三种解决方案给大家介绍js中取二维数组中最大值的方法。介绍的非常详细,具有参考价值
在JavaScript中可以通过内置的 Math.max() 的最大值,但是要从多重数组中取出最大值,还是有一定的难度。
假设你有一个数组,而且这个数组中包含了数字的子数组,而我们要做的是从数组中的每个子数组中返回其最大的那个最大数。
基本解决方案
function largestOfFour(arr) {
var results = []; // 创建一个results变量来存储
// 创建一个外层循环,遍历外层数组
for (var n = 0; n & arr. n++) {
var largestNumber = 0; // 创建第二个变量,存储最大的数
// 创建另一个循环,遍历子数组
for (var sb = 0; sb & arr[n]. sb++) {
//检查子数组的元素是否大于当前存储的最大值
if (arr[n][sb] & largestNumber) {
// 如果为真,将这个值赋予给变量largestNumber
largestNumber = arr[n][sb];
// 内部循环后,将每个子数组中的值保存到数组results中
results[n] = largestN
// 返回数组
largestOfFour([[1,34],[456,2,3,44,234],[,5,6],[34,78,23,1]]); //[34, 456, 4567, 78]
上面的方法是一个普通的解决方案,通过两个 for 循环对数组及其子数组做遍历:
创建一个 results 变量用来存储每个子数组中遍历出来的最大值
创建外循环 for 遍历外层数组
创建第二个变量 largestNumber 用来存放最大值。这个变量值必须放在内部 for 循环的外面,因为这样他才不会被重新分配
创建第二个 for 循环,来遍历子数组中的每个元素
通过一个 if 语句来判断当前子数组的元素是否大于当前存储的最大值 largestNumber 。如果是( true ),将这个最大值存储给 largestNumber 。
内部循环结束后,将每个子数组中的最大值存储到最初声明的变量 results 中
最后返回 results 数组
取出所有子数组中的每个最大值之后,得到一个新数组 results ,这个时候只需要通:
Array.prototype.max = function () {
return Math.max.apply({},this);
largestOfFour(arr).max();
就可以得到其中的最大值。
largestOfFour([[1,34],[456,2,3,44,234],[,5,6],[34,78,23,1]]).max(); // 4567
中级解决方案
function largestOfFour (arr) {
// 通过map()方法,并通过回调函数,将子数组中最大值组合在一起,得到一新数组
return arr.map(function (group) {
// 通过reduce方法,把每个子数组中最大值返回到group数组中
return group.reduce(function (prev, current) {
// 如果current 大于prev,返回current,否则返回prev
return (current & prev) ? current :
largestOfFour([[1,34],[456,2,3,44,234],[,5,6],[34,78,23,1]]); // [34, 456, 4567, 78]
在外层数组中使用 Array.prototype.map() 方法遍历数组。使用 map() 方法遍历数组,会调用一个回调函数,在这个回调函数中,使用 reduce() 方法对每个子数组 group 进行合并,将值返回到一个新数组中。而在使用 reduce() 方法时,同样会调用一个回调函数,这个回调函数只做了一件事情,就是子数组中的元素做为比较,如果 current 大于 prev ,将会返回 current ,否则返回 prev ,最终得到每个子数组中最大值。
和前面一样,通过 Math.max.apply() 最终得到最大值。
最佳解决方案
function largestOfFour (arr) {
return arr.map(Function.apply.bind(Math.max, null));
largestOfFour([[1,34],[456,2,3,44,234],[,5,6],[34,78,23,1]]); //[34, 456, 4567, 78]
这个方案,使用 Function.bind 方法创建一个特殊的回调函数,就类似于 Math.max 方法一样,但其有一个 Function.prototype.apply 功能,将数组作为它的参数。
先对主数组中的每个元素做遍历,也就是数组内部的每个子数组
使用 map() 方法需要一个回调函数,用来找出内部每个数组中的最大值。需要创建一个函数,让 Math.max 能接受输入的数组工作。换句话说,这是非常简单而且这样工作也非常的好,如 Math.max([9,43,20,6]); 将会返回最大值 43
Function.prototype.apply 方法工作可以接受数组做为参数,但函数通过调用上下文,这事情就有点复杂。例如 Math.max.apply(null,[9,43,20,6]) 将调用一个 Max.max 方法,但这样的方法找起来不容易。
这里给 Function.prototype.apply 方法传递了一个 null 参数,告诉 Math.max 不需要任何上下文。
因为 arr.map() 需要一个回调函数,而不只是一个表达式,我们在 Function.bind 方法中提供了一个函数
因为 Function.prototype.apply 是一个静态方法,类似一个函数对象,我们可以称之为 Function.prototype.apply 上绑定了一个 Function.prototype.bind 。例如: Function.apply.bind
现在可以通过 Function.prototype.apply.bind 回调函数指定其上下文,比如在这个示例中的 Math.max 方法
由于是嵌入到 Function.prototype.apply 方法,需要一个上下文作为第一个参数,而且这个上下文还是一个虚假的。
所以我们将 null 作为第二个参数传递给 Function.prototype.apply.bind ,并且绑定一个上下文,这个上下文就是 Math.max 方法
由于 Math.max 是独立于任何上下文的,所以它会忽略 Function.prototype.apply 方法调用的虚假上下文
我们使用 Function.prototype.apply.bind(Math.max,null) 让一个新函数接受 arr.map 值,比如数组中的子数组
多维数组中取最大值
上文使用不同的方法实现了从二维数组中取出子数组中最大值,并且将这些最大值重新组成一个新数组,如果延伸一下,取出里面的最大值时,还需要使用 Array.prototype.max 函数,函数中通过 Math.max.apply({},this) 取得最大值。不过如果不是二维数组,那上述方法将无法取出数组中最大的值。
而在多维数组中取最大值,可以通过 join() 和 split() 方法组合在一起:
function largestOfFour (arr) {
var newArray = arr.join(",").split(",");
return Math.max.apply({},newArray);
largestOfFour([12,23]); // =&23
largestOfFour([12,23,[],[345,566]]); // =&1234
largestOfFour([12,23,[121,90890]],[345,566,[345,78,90]]]); // =&90890
largestOfFour([12,23,[121,90890]],[345,566,[345,78,90,[]]]]); // =&
同样可以使用类似的方法取出多维数组中的最小值:
function smallerOfFour (arr) {
var newArray = arr.join(",").split(",");
return Math.min.apply({},newArray);
smallerOfFour([12,23]); // =&12
smallerOfFour([112,23,[],[345,566]]); // =&23
smallerOfFour([212,123,[121,90890]],[345,566,[345,78,90]]]); // =&78
smallerOfFour([102,230,[121,90890]],[345,566,[345,78,90,[]]]]); // =&78
在《 JavaScript学习笔记:取数组中最大值和最小值 》一文中介绍了使用 Math.max.apply({},arr) 来取数组中最大的数字。这篇文章中从不同的角度的介绍了如何在二维数组中取出最大的数,但很多时候,数组还有多维数组,文章最后介绍了如何实现多维数组中取出最大值。如果您有更多的方案,欢迎在评论中与我们一起分享。
与本文相关文章js二维数组定义和初始化的三种方法总结
投稿:jingxian
字体:[ ] 类型:转载 时间:
本篇文章主要是对js二维数组定义和初始化的三种方法进行了总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助
方法一:直接定义并且初始化,这种遇到数量少的情况可以用
var _TheArray = [["0-1","0-2"],["1-1","1-2"],["2-1","2-2"]]
方法二:未知长度的二维数组
var tArray = new Array();
//先声明一维
for(var k=0;k&i;k++){
//一维长度为i,i为变量,可以根据实际情况改变
tArray[k]=new Array();
//声明二维,每一个一维数组里面的一个元素都是一个数组;
for(var j=0;j&p;j++){
//一维数组里面每个元素数组可以包含的数量p,p也是一个变量;
tArray[k][j]="";
//这里将变量初始化,我这边统一初始化为空,后面在用所需的值覆盖里面的值
给定义的数组传入所需的值
tArray[6][1]=5;//这样就可以将5的值传入到数组中,覆盖初始化的空
方法三:在这之前,以上两者方法都有问题,方法二,每次定义都初始化了,虽然后面可以动态修改,但是还是不方法
所以我尝试了一种动态传入值到数组的方法
ps:一些在实践过程中遇到的数组有趣的现象
本来以为二维数组可以像下面这样直接传入值
for(var a=0;a&i;a++){
tArray[a]=(matArray[a],addArray[a]); //matArray[a]和addArray[a]是两个数组,这两个数组直接传入tArray[a]中
结果是tArray[a]中收到的是后面一个数组的值,matArray[a]的内容被忽略的,如果换一个位置,matArray[a]在后面,则传入的是addArray[a]的值。
思考:简单的例子:
var a=[1,2];
b[0]=a;//把数组a作为b数组的元素传入b数组中
alert(b[0][1]);& //2
上面是最简单的二维数组,
上面例子换种写法:
b[0]=[1,2];//把数组[1,2]作为b数组的元素传入b数组中
alert(b[0][1]);& //2
可以看出上面的b[0]=[1,2]是可以用的
for(var a=0;a&i;a++){
tArray[a]=[ matArray[a],addArray[a] ];& 上面例子中的()修改为[] 就可以成功的组成一个二维数组了
总结:方法三:
for(var a=0;a&i;a++){
tArray[a]=[ aArray[a],bArray[a],cArray[a]]; 还可以增加dArray[a],eArray[a]
这种情况适用于已知几个数组,把他们组合成一个二维数组情况
JS 创建多维数组
var allarray=new Array();
var res="";
function loaddata()
for(var i=0;i&3;i++)
var starth=i*200;
var strarw=i*200;
var endh=(i+1)*200;
var endw=(i+1)*200;
allarray[i]=new Array();
allarray[i][0]=new Array();
allarray[i][1]=new Array();
allarray[i][0][0]=
allarray[i][0][1]=
allarray[i][1][0]=
allarray[i][1][1]=
for(var i=0;i&allarray.i++)
var sh=allarray[i][0][0];
var sw=allarray[i][0][1]
var eh=allarray[i][1][0];
var ew=allarray[i][1][1]
res+="第"+i+"个坐标的开始坐标是:"+sh+","+sw+"结束坐标是:"+eh+","+ew+"&br/&";
document.getElementById("dv").innerHTML=
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具}

我要回帖

更多关于 ps怎么改变图像颜色 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信