Javascript:计算字符串变量中数组的出现次数和返回长度

时间:2016-12-09 08:57:12

标签: javascript jquery arrays string

var search = ["ab", "cd", "ef"];
var string = "ab yz cd wx ef uv ab yz cd";

我想创建一个函数,可以接收搜索词并找到它们中有多少出现在字符串中,然后输出如下:

[{"ab": 2}, {"cd": 2}, {"ef": 1}]

我可以使用单个数组执行此操作,但是现在我需要使用2个独立的数组。任何想法都会有帮助!我想我想分割字符串,但不知道如何使用'search'变量中的文本来搜索分割字符串中的内容。

3 个答案:

答案 0 :(得分:6)

Array#mapString#match方法与word boundary regex一起使用。

var search = ["ab", "cd", "ef"];
var string = "ab yz cd wx ef uv ab yz cd";

console.log(
  // iterate over the array
  search.map(function(v) {
    // initialize object for array element
    var obj = {};
    // define array element as the number of count
    // regex can be generate from string using RegExp 
    // constructor and use modifrier `g` for global match
    obj[v] = string.match(new RegExp('\\b' + v + '\\b', 'g')).length;
    // return the object
    return obj;
  })
)

答案 1 :(得分:1)

你可以create一个空对象,迭代search并用0初始化对象中的所需项目。

然后split string并仅计算对象为in的项目。



var search = ["ab", "cd", "ef"],
    string = "ab yz cd wx ef uv ab yz cd",
    count = Object.create(null);

search.forEach(function (a) {
    count[a] = 0;
});

string.split(' ').forEach(function (a) {
    a in count && count[a]++;
});

console.log(count);




答案 2 :(得分:0)

你可以Array.prototype.map()你的def CVangles(theta, geo, key): """ Parameters ---------- theta : float The crank angle, between 0 and 2*pi geo : struct The structure with the geometry obtained from get_geo() key : string The name of the involute to be considered """ CV = struct() CV.Outer = struct() CV.Inner = struct() if key.startswith('c1.'): alpha = int(key.split('.')[1]) CV.Outer.involute = INVOLUTE_FI CV.Outer.phi_0 = geo.phi_fi0 return CV 数组,并为数组中的每个项目返回一个对象作为键及其值search中的相应出现长度:

string