の組み合わせでランキング生成する私のような入力をしている:は、文字列
var a = [23, 45, 21], b = [45, 23], c = [21, 32], d = [23], e= [32], f= [50, 54];
これらはすべて別々のエンティティであり、一度に一つだけの配列を渡すことができます。 、すなわちgenerateRanks(a)です。ときどき後で、generateRanks(b)
結果はグローバル変数に格納されます。毎回、私は入力を呼び出して、結果が更新されます。
結果には、配列の値のすべての組み合わせの順位付けが含まれている必要があります。
{
"21": 2,
"23": 3,
"32": 2,
"45": 2,
"52": 1,
"54": 1,
"23, 45": 2,
"23, 45, 21": 1,
"21, 32": 1,
"50 : 54": 1,
"50" : 1
}
これは私が
var result;
function generateRank(abc) {
if(!result) {
result = {};
}
var spl = getCombinations(abc);
spl.forEach(function(st, index) {
var fArrayKey = st.split(":");
var noMatch = true;
Object.keys(result).forEach(function(key) {
console.log(key);
var matchedKey = containsAllStrings(key, fArrayKey);
if(matchedKey) {
console.log("macthed true ");
result[key] = result[key] + 1;
noMatch = false;
}
else {
console.log("macthed false ");
noMatch = true;
}
});
if(noMatch) {
result[fArrayKey] = 1;
}
});
}
function containsAllStrings(word, array) {
for(var k=0; k<array.length; k++) {
if(word.indexOf(array[k]) == -1) {
return false;
}
}
return true;
}
function getCombinations(chars) {
var result = [];
var f = function(prefix, chars) {
for (var i = 0; i < chars.length; i++) {
result.push(prefix + chars[i]);
f(prefix + chars[i] + ":", chars.slice(i + 1));
}
}
f('', chars);
return result;
}
すべてのヘルプ
を試してみましたよされているもの:出力は次のようにすべきですか?あなたはこのようにそれを行うことができます
私は質問を更新しました。 – MohanRajNK