2つの別々の配列からの一意の要素で構成される新しい配列を作成する必要があります。
両方の配列を1つの配列に変換してから、これをオブジェクトに変換して、要素の頻度を確認しました。オブジェクトプロパティの値が1(一意のプロパティにする)の場合、それを配列(値を引いたもの)に戻したいと思います。これを達成する簡単な方法はありますか?
編集:結果をforループの外に移動しました。期待される出力は[4]である必要があります
function diffArray(arr1, arr2) {
var finalArr = [];
var countObj = {};
var newArr = [...arr1, ...arr2];
for (var i = 0; i < newArr.length; i++) {
if (!countObj[newArr[i]]) countObj[newArr[i]] = 0;
++countObj[newArr[i]];
}
for (var key in countObj) {
if (countObj[key] === 1) {
finalArr.push(key);
}
} return finalArr;
}
diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]);
私が正しく理解していれば、あなたは違いを見つけるしたいしているarr1
とarr2
(いずれかの配列に別個のものである)のアイテムの新しい配列としての差(もしあれば)こと、およびリターン。
これを実現する方法はいくつかあります。1つのアプローチは次のとおりです。
function diffArray(arr1, arr2) {
const result = [];
const combination = [...arr1, ...arr2];
/* Obtain set of unique values from each array */
const set1 = new Set(arr1);
const set2 = new Set(arr2);
for(const item of combination) {
/* Iterate combined array, adding values to result that aren't
present in both arrays (ie exist in one or the other, "difference") */
if(!(set1.has(item) && set2.has(item))) {
result.push(item);
}
}
return result;
}
console.log(diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]), " should be [4]");
console.log(diffArray([1, 2, 3, 5, 8], [1, 2, 3, 5]), " should be [8]");
console.log(diffArray([1, 2, 3, 5, 8], [1, 2, 3, 5, 9]), " should be [8, 9]");
console.log(diffArray([1, 2], [1, 2]), " should be []");
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加