在這裏,我想比較Cars1記錄與myArray記錄,如果他們匹配我想設置選擇屬性爲真的MyArray匹配記錄。比較2包含逗號分隔值的數組記錄
myArray的Abc.mp3,lmn.mp3,ggg.mp3與cars1的Abc.mp3,lmn.mp3匹配,因爲Abc.mp3在兩個數組中都是匹配的。
這裏Abc.mp3,lmn.mp3,ggg.mp3 3個不同的記錄,以便通過逗號分割如果任何的字符串中cars1是匹配(由逗號分割),則 設定標誌後爲true。
預期輸出:
var myArray = [
{field: 'Abc.mp3,lmn.mp3,ggg.mp3', flag: true}, //Abc.mp3 is matching
{field: 'kkk.mp3', flag: false},
{field: 'Xyz.mp3', flag: true}, //Xyz.mp3 is matching
{field: 'MMM.mp3,UUU.mp3', flag: true}, //UUU.mp3 is matching
];
var myArray = [
{field: 'Abc.mp3,lmn.mp3,ggg.mp3', flag: false},
{field: 'kkk.mp3', flag: false},
{field: 'Xyz.mp3', flag: false},
{field: 'MMM.mp3,UUU.mp3', flag: false},
];
var cars1 = ["Abc.mp3,lmn.mp3", "Xyz.mp3","UUU.mp3"];
var cars2 = ["S1","S2","S3" ];
var array2 =[];
var map = Object.create(null);
cars1.forEach(function (entry, index) {
map[entry] = index;
});
array2 = myArray.map(function (item) {
var index = map[item.field];
if (index === undefined) {
return undefined;
}
item.flag = true;
return cars2[index];
});
console.log(myArray);
更新: 現在cars1和cars2記錄有1到1彼此,這意味着Abc.mp3,LMN關係汽車1的.mp3分別指向汽車2的S1。
同時匹配myArray的與Cars1如果匹配,那麼找到我要指出的cars1的指數,基於該指數我想從cars2獲取記錄,並指定在該索引位置數組2。
對於例如:abc.mp3,lmn.mp3,myArray和Abc.mp3的ggg.mp3,cars1的lmn.mp3匹配,所以Abc.mp3的索引,lmn.mp3爲0,因此基於此索引得到從第0 cars2索引記錄並分配在第0 index.for Xyz.mp3 S2到ARRAY2將在數組2第二位置。
預計在輸出數組2:
array2 = ["S1" ,undefined, "S2","S3" ];
請澄清你的問題。使用** BOLD **和_Italic_對重要部分進行格式化 –
這個問題很難跟蹤,而且不清楚你的實際問題是什麼。所以,你需要經過'myArray',如果任何逗號分隔的中值'field'匹配任何逗號分隔值是'cars1'然後設置'flag'到TRUE;,是這樣嗎?那我們可以擺脫無關緊要的'cars2'嗎?你是否需要'array2',因爲無論如何你都在改變原始的(或者不是那個意圖?)。 –
@MattBurland:你對第一點是正確的,cars2和array2是重要的。請參閱我的更新,其中我已經解釋了 –