而不是JavaScript的array_count_values

use*_*342 3 javascript php phpjs

我有以下PHP脚本,现在我需要在JavaScript中做同样的事情.JavaScript中的函数是否与PHP函数类似,我一直在搜索但找不到类似的东西?我想要做的是计算某个单词在数组中使用的次数.

$interfaceA = array($interfaceA_1,$interfaceA_2,$interfaceA_3,$interfaceA_4,$interfaceA_5,$interfaceA_6,$interfaceA_7,$interfaceA_8);       

$interfaceA_array=array_count_values($interfaceA);
$knappsatsA = $interfaceA_array[gui_knappsats];
$touchpanelA = $interfaceA_array[gui_touchpanel];
Run Code Online (Sandbox Code Playgroud)

Dhr*_*hak 11

为什么不简单地创建一个新的javascript数组"count"迭代原始数组,并增加数组中遇到的键的"计数"计数. http://jsfiddle.net/4t28P/1/

var myCurrentArray = new Array("apple","banana","apple","orange","banana","apple");

var counts = {};

for(var i=0;i< myCurrentArray.length;i++)
{
  var key = myCurrentArray[i];
  counts[key] = (counts[key])? counts[key] + 1 : 1 ;

}

alert(counts['apple']);
alert(counts['banana']);
Run Code Online (Sandbox Code Playgroud)

  • 编辑:`counts`应该是_object_` {}`,而不是`Array`. (2认同)

小智 6

另一个优雅的解决方案是使用Array.prototype.reduce.鉴于:

var arr = new Array("apple","banana","apple","orange","banana","apple");
Run Code Online (Sandbox Code Playgroud)

你可以在它上面运行reduce:

var groups = 
  arr.reduce(function(acc,e){acc[e] = (e in acc ? acc[e]+1 : 1); return acc}, {});
Run Code Online (Sandbox Code Playgroud)

最后你可以查看结果:

groups['apple'];
groups['banana'];
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,reduce有两个参数:

  1. 一个函数(匿名在这里)获取一个累加器(从reduce的第二个参数初始化)和当前数组元素
  2. 累加器的初始值

无论函数返回什么,它都将在下一次调用中用作累加器值.

从类型的角度来看,无论数组元素的类型如何,累加器的类型必须与reduce(初始值)的第二个参数的类型以及匿名函数的返回值的类型相匹配.这也是reduce的返回值的类型.


Kam*_*ski 6

尝试

array.reduce((a,c) => (a[c] = ++a[c] || 1, a) ,{});
Run Code Online (Sandbox Code Playgroud)

array.reduce((a,c) => (a[c] = ++a[c] || 1, a) ,{});
Run Code Online (Sandbox Code Playgroud)