turli uzunliklardagi ikki qatorni taqqoslash va nodir elementlar bilan bir qatorni qaytarish

Bu erda turli uzunlikdagi ikkita array bor. Bir qator qator ikkita qatorda noyob bo'lmagan qiymatlar bilan qaytarilishi kerak. Ammo derleyici noto'g'ri chiqdi beradi. Bu funktsiyalar bilan bog'liq muammolar qanday? Chiqish: [4,5] o'rniga [4].

function diffArray(arr1, arr2) {
  var newArr = [];
  var y=[];
  var z=[];
 //Same, same; but different.
  var flag=0;
  for(var i=0;i
0
derleyici noto'g'ri chiqdi beradi ??
qo'shib qo'ydi muallif ꜱᴜʀᴇꜱʜ ᴀᴛᴛᴀ, manba
8-satr: ehtimol arr2.indexOf (arr1 [i]) === - 1 (oxirgi pareneni ko'chirish) degan ma'noni anglatadi.
qo'shib qo'ydi muallif gyre, manba
nima uchun kutmoqdasiz [5]? nodir element emas [4]
qo'shib qo'ydi muallif Amresh Venugopal, manba
Ha, kechirasiz! Kutilgan natijalar: [4]
qo'shib qo'ydi muallif aayushi, manba
[4,5] natijalari [5] @ sᴜʀᴇs instead o'rniga chiqadi
qo'shib qo'ydi muallif aayushi, manba

9 javoblar

Funktsiyangiz uchun alternativni sinashingiz mumkin

a1 = [1, 2, 3, 5];
a2 = [1, 2, 3, 4, 5];
result = [];
if (a1.length > a2.length) {
  temp = a1;
  a1 = a2;
  a2 = temp;
}

$.grep(a2, function(k) {
        if ($.inArray(k, a1) == -1) result.push(k);
});
console.log(result);,

Ikkala qatorlaringiz uchun jsfiddle ishlaydi.

Bir harakat qilib ko'ring, bu ishlaydi.

1
qo'shib qo'ydi
Ha, uni avtomatik ravishda qabul qilish kerak, uni qaytariladigan qatorning qiymati. Bir marta uni sinab ko'ring
qo'shib qo'ydi muallif rahulsm, manba
Ikkala kamroq va kattaroq shartlarni qo'shdim, tekshirishni tekshiring
qo'shib qo'ydi muallif rahulsm, manba
Bu holda arr1 kattaligi arr2 dan kattaroq bo'lsa nima bo'ladi? @rahul_m
qo'shib qo'ydi muallif aayushi, manba
Bu erda (k) funktsiyasi, a2 qiymatini avtomatik ravishda qabul qiladimi yoki uni biron joyda aniqlash kerakmi? Men javascriptga yangi
qo'shib qo'ydi muallif aayushi, manba

Kodingizda quyidagilar mavjud:

z=arr1.slice(i,i+1);
y=arr2.slice(j,j+1);

Agar shunday qilsangiz, noyob elementni har safar qabul qilsangiz, saqlangan avvalgi narsani yo'qotasiz.

Bundan tashqari, Array.prototype.slice qatorni qaytaradi, shuning uchun siz slice() dan foydalanishingiz shart emas.

function diffArray(arr1, arr2) {
  var newArr = [];
  var y=[];
  var z=[];

  var flag=0;
  for(var i=0;i

Bu sizga yordam berishi kerak.

Mana shu narsani ko'rsatish uchun fiddle .

1
qo'shib qo'ydi
function diffArray(arr1, arr2) {
  var newArr = [];

  var firstArray = arr1;
  var secondArray = arr2;
  if (arr2.length > arr1.length) {
    firstArray = arr2;
    secondArray = arr1;
  }

  var isNotMatched = false;

  for (var i in firstArray) {
    for (var j in secondArray) {
      if (firstArray[i] !== secondArray[j]) {
        isNotMatched = true;
      } else {
        isNotMatched = false;
        break;
      }

    }

    if (isNotMatched)
      newArr.push(firstArray[i]);

  }

  return newArr;
}

diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]);

Hamma uchun 2-nashr ishi

function diffArray(arr1, arr2) {
  var newArr = [];
  var firstArray = arr1;
  var secondArray = arr2;
  if (arr2.length > arr1.length) {
    firstArray = arr2;
    secondArray = arr1;
  }

  var whenSameLegth = '';
  var isNotMatched = false;

  for (var i in firstArray) {
    for (var j in secondArray) {
      if (firstArray[i] !== secondArray[j]) {
        isNotMatched = true;
        whenSameLegth = secondArray[j];
      } else {
        isNotMatched = false;
        break;
      }

    }
    if (isNotMatched && arr2.length === arr1.length) {
      newArr.push(firstArray[i]);
      newArr.push(whenSameLegth);
    } else if (isNotMatched) {
      newArr.push(firstArray[i]);
    }
  }

  return newArr;
}

diffArray (["andezit", "o't", "axloqsizlik", "pushti jun", "o'lik buta"], ["diorit", "andezit", "o't", "axloqsizlik", "o'lik buta"]);

1
qo'shib qo'ydi
Iltimos, hozir 2-rasm @ayushini tekshiring
qo'shib qo'ydi muallif Love-Kesh, manba
Iltimos, yuqoridagi funksiyadan foydalaning.
qo'shib qo'ydi muallif Love-Kesh, manba
["andezit", "o't", "axloqsizlik", "pushti jun", "o'lik buta"], ["diorit", "andezit", "o't", "axloqsizlik", "o'lik buta" diorit "," pushti jun "). Buning uchun ishlamaydi! @ sevgi-Kesh
qo'shib qo'ydi muallif aayushi, manba

Quyidagilarni tekshirib ko'ring:

function diffArray (arr1, arr2) {
    var z = arr1.filter(function (value) { return !~arr2.indexOf(value); });
    var y = arr2.filter(function (value) { return !~arr1.indexOf(value); });

    return [].concat(y, z);
}
1
qo'shib qo'ydi
"Kontraktni" "concat" ga o'zgartiring ...
qo'shib qo'ydi muallif gyre, manba
Har ikkisi qanday ishlaydi?
qo'shib qo'ydi muallif rahulsm, manba
! - bu Mantiqiy QAYD va ~ bir Bitwise NOT .
qo'shib qo'ydi muallif floriangosse, manba
Urre. Albatta. Rahmat
qo'shib qo'ydi muallif floriangosse, manba
operator nima qiladi? Uni google'da topa olmayapman. @floriangosse
qo'shib qo'ydi muallif aayushi, manba

Ikkala qatorni birlashtirib, noyob qiymatlarni qaytarishingiz mumkin.

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

function diffArray(a1, a2){
  var data = a1.concat(a2);
  return data.filter(function(item, i, a){
    return a.indexOf(item) === a.lastIndexOf(item)
  });
}

console.log(diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]));
console.log(diffArray([1, 2, 3, 5], [11, 12, 13, 14, 5]));
</div> </div>
0
qo'shib qo'ydi

Xash stolidan foydalanishingiz mumkin. u qatorda bir nechta equla elementi uchun ham ishlaydi.

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

function getSymmetricDifference(a1, a2) {
    var hash = {};
    a1.forEach(function (a) {
        (hash[a] = hash[a] || { count: 0, value: a }).count++;
    });
    a2.forEach(function (a) {
        (hash[a] = hash[a] || { count: 0, value: a }).count--;
    });
    return Object.keys(hash).filter(function (a) { return hash[a].count; }).map(function (a) { return hash[a].value; });
}

console.log(getSymmetricDifference([1, 2, 3, 5], [1, 2, 3, 4, 5]));
console.log(getSymmetricDifference(["diorite", "andesite", "grass", "dirt", "pink wool", "dead shrub"], ["diorite", "andesite", "grass", "dirt", "dead shrub"]));
</div> </div>
0
qo'shib qo'ydi

Buni ko'ring

var newArr = [];
    function diffArray(arr1, arr2) {


            arr1.forEach(function (item) {
                if (arr2.indexOf(item) === -1)
                    newArr.push(item);
            });

            arr2.forEach(function (item) {
                if (arr1.indexOf(item) === -1)
                    newArr.push(item);
            });

    }

    diffArray(["andesite", "grass", "dirt", "pink wool", "dead shrub"], ["diorite", "andesite", "grass", "dirt", "dead shrub"]);
0
qo'shib qo'ydi
@aayushi yangilangan javob.
qo'shib qo'ydi muallif Mairaj, manba
["andezit", "o't", "axloqsizlik", "pushti jun", "o'lik buta"], ["diorit", "andezit", "o't", "axloqsizlik", "o'lik buta" diorit "," pushti jun "). Buning uchun ishlamaydi! @Mairaj
qo'shib qo'ydi muallif aayushi, manba

Agar siz JavaScript-ni eng so'nggi versiyasidan (ES6) foydalansangiz, unda quyidagi (O) (N) va O (N²) kvadratik vaqtlardan farqli o'laroq, chiziqni bajarish kerak.

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="true"> <div class="snippet-code">

function diffArray(a, b) {
  a = new Set(a)
  let result = []
  for (let value of b) {
    a.delete(value) || result.push(value)
  }
  result.push(...a)
  return result
}

console.log(diffArray(
  [1, 2, 3, 5],
  [1, 2, 3, 4, 5]
))
console.log(diffArray(
  ["diorite", "andesite", "grass", "dirt", "pink wool", "dead shrub"],
  ["diorite", "andesite", "grass", "dirt", "dead shrub"]
))
</div> </div>
0
qo'shib qo'ydi

y va z kodlari har doim z = arr1 har doim yangi qator uzunligi bilan yoziladi, chunki yozma ravishda faqat ikkita maqola qo'yilgan bo'lishi mumkin. (i, i + 1); yoki y = arr2.slice (j, j + 1); chaqiriladi. Ehtimol, Array.push, ya'ni z.push (arr1 [i]) va y.push (arr2 [j]) dan foydalanishni xohlaysiz. Natijada ketma-ketligini har bir marta tiklash o'rniga, har bir element topilganida bir xil qatorga qo'shiladi.

0
qo'shib qo'ydi
Hatto push() bilan kutilgan natijalar kelmaydi! @dncook
qo'shib qo'ydi muallif aayushi, manba
Javascript UZB
Javascript UZB
99 ishtirokchilar

@js_uzb @vuejs_uz @react_uz @nodejs_uz @angular_uz @ngTashkent @yiiframework_uz @laravel_uz @linux_uzbek @python_uz @swift_uzb —————— @uzdevgroup @UzGeeksGroup ——— @UzDev_Jobs @jobs_uzb