有人可以解释为什么Javascript中的这些数组方法有作为参数的功能吗?一个例子是:
newArray = oldArray.map(
function(val){
return val + 3;
});
也是这样,
array.sort(function(a, b) {
return b - a;
});
我无法理解这些函数及其参数如何在实际的Array方法中发挥作用。
答案 0 :(得分:4)
首先您需要了解,所有JavaScript函数都是first class,这意味着:
on('child_changed')
是Array对象的方法,它接受callback function作为参数。
例如:
child_changed
<html>
<head><title>Sheet</title></head>
<body>
<h2 align="center">SKU Selection</h2>
<?php
$conn=mysqli_connect('localhost','root','');
$db="sample";
mysqli_select_db($conn,$db);
$sql="SELECT DISTINCT(Site) FROM `bom`";
$result=mysqli_query($conn,$sql);
echo "Site Name :";
echo "<select name='Site'>";
echo "<option value='0'>Select Site</option>";
while($row=mysqli_fetch_array($result))
{
echo "<option value='".$row['Site']."'>".$row['Site']."</option>";
}
echo "</select>";
$sql1="SELECT BOM Desc FROM `bom` where Site= ";
$result1=mysqli_query($conn,$sql1);
echo "<br>";
echo "SKU :";
echo "<select name='SKU'>";
while($row1=mysqli_fetch_array($result1))
{
echo "<option value='".$row1['BOM Desc']."'>".$row1['BOM Desc']."</option>";
}
echo "</select>";
?>
</body>
</html>
reduce(), sort(), map() and filter()
:
reduce()
var total = [0, 1, 2, 3].reduce(function(a, b) {
return a + b;
});
:
sort()
var items = ['réservé', 'premier', 'cliché', 'communiqué', 'café', 'adieu'];
items.sort(function (a, b) {
return a.localeCompare(b);
});
:
map()
答案 1 :(得分:1)
此回调函数用于定义行为。就像在排序中一样,它将按降序排序数组。这就是你想要如何排序数组或过滤器数组的定义。你可以玩它来更好地理解它,或者MDN有很好的例子。
var arr = [12,23,1,56,4,32];
alert(arr.sort());
alert(arr.sort(function(a,b) {
return b - a;
} ));
在第一个示例的情况下,排序方法将通过比较第一个数字进行排序。为了实现正确的排序,我们需要传递自己的逻辑。
您可以通过更改回调函数中的逻辑来对各种不同的排序使用sort。
您提到的其他数组方法也是如此。
在您想要升序的上述示例中,您需要
返回a - b;
答案 2 :(得分:1)
这是函数式编程风格
To(over)简化概念是,这些函数将循环遍历该数组的所有成员。它只会插入你需要的地方传递的功能
以地图
为例如果你不使用map,你需要写的全部内容是
var oldArray;
var newArray;
for(var i in oldArray){
if(oldArray[i])
newArray.push(oldArray[i] + 3);
}
你可以看到我们每次做这样的事情。将改变的是for
块中的行。所以他们只是为它做了一个功能
function map(oldArray,ConvertToSomething){
var newArray;
for(var i in oldArray)
newArray.push(ConvertToSomething(oldArray[i]));
return newArray;
}
var array;
//// The function you pass in here will became that ConvertToSomething above
var newArray = map(array,function(val){ if(val) return val + 3; })
很容易。同样适用于sort
和filter
。 sort
会为您挑选一对。 filter
与map
类似,但它会创建一个数组,只需返回false或true就可以排除您不想要的内容