Javascript 2 ko'chadan o'tib, ikkita massivni birlashtiramiz

Quyidagi kabi ikkita massivni birlashtirib, birlashtirmoqchi bo'laman. Foydalanuvchiga 1 yoki 100 mahsulotni sotib olishi mumkin bo'lgan qiymatlarni bilmayman.

Array1 = ['ABC', 'DEF', 'GHI']

Array2 = ['123', '45', '6789',]

Quyidagilardan chiqishim kerak:

ABC:123|DEF:45|GHI:6789

Hozirda kodim bor ...

function() {
  var array_one = ['ABC', 'DEF', 'GHI', 'JKL'];
  var array_two = ['179.99', '349.99', '399.99', '389'];
  for (var i = 0; i < array_one.length; i++) {
    for (var j = 0; j < array_two.length; j++) {
      return(array_one[i] + ":" + array_two[j] + "|");
    }
  }
}

Bu faqat bitta qiymatni chiqaradi va pastadir emas, mening loopi buzadigan har qanday fikr.

4

7 javoblar

Agar ikkala qator bir xil uzunlikka ega ekanligini bilsangiz, oddiy xarita etarli bo'ladi:

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

var array1 = ['ABC', 'DEF', 'GHI']
var array2 = ['123', '45', '6789']

var result = array1.map(function(item, index) {
  return item + ':' + array2[index]
}).join('|')

console.log(result)
</div> </div>

Yoki ES2015 versiyasi:

var result = array1.map((item, index) => `${item}:${array2[index]}`).join('|')
3
qo'shib qo'ydi

Sizning fikringiz biroz noto'g'ridir, siz ikkita ilova kerak emas. Bir döngüyle buni qila olasiz va pastadir ichida dönmemelisiniz.

Ular bir xil o'lchamda bo'lgani uchun, quyida kod qilish kerak

var result="";
for (var i = 0; i < array_one.length; i++) {     
     result += (array_one[i] + ":" + array_two[i] + "|");    
}
return result;
1
qo'shib qo'ydi
@Rajesh Ahh, mening yomonligim. Tahrirlangan. Rahmat
qo'shib qo'ydi muallif ꜱᴜʀᴇꜱʜ ᴀᴛᴛᴀ, manba
array_two [2] bo'lishi kerak array_two [i] ?
qo'shib qo'ydi muallif Rajesh, manba
Yana bir tuzatish, siz har doim "|" qo'shasiz. So'nggi iteratsiya uchun bunday bo'lmasligi kerak.
qo'shib qo'ydi muallif Rajesh, manba

array_two dan elementlar qo'shish uchun map() dan foydalanishingiz mumkin va join() qatorini yaratishingiz mumkin.

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

var array_one = ['ABC', 'DEF', 'GHI', 'JKL'];
var array_two = ['179.99', '349.99', '399.99', '389'];

var result = array_one.map(function(e, i) {
  return e + ':' + array_two[i]
}).join('|')

console.log(result)
</div> </div>
1
qo'shib qo'ydi

You can use Array.reduce

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

var array_one = ['ABC', 'DEF', 'GHI', 'JKL'];
var array_two = ['179.99', '349.99', '399.99', '389'];

var result = array_one.reduce(function(p, c, i, a) {
  p += c + ":" + array_two[i]
  if (i < a.length - 1)
    p+="|"
  return p;
}, "")

console.log(result)
</div> </div>

Loop uchun

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

var array_one = ['ABC', 'DEF', 'GHI', 'JKL'];
var array_two = ['179.99', '349.99', '399.99', '389'];

var result = "";
for(var i = 0; i< array_one.length; i++){
  result += array_one[i] + ":" + array_two[i]
  if (i < array_one.length - 1)
    result += "|"
}
console.log(result)
</div> </div>
1
qo'shib qo'ydi

Siz istagan chiqish uchun faqat bitta 'loop' uchun kifoya

     var  returnValue = "";
     for (var i = 0; i < array_one.length; i++)
        {
        returnValue+ =array_one[i] + ":" + array_two[j] + "|";
        }
     return  returnValue;
1
qo'shib qo'ydi

Bu faqat bitta qiymatni chiqaradi va hech qanday fikr yuritmaydi   mening loopim buziladigan joyda.

sabab nima?

Faqat bitta qiymat qaytarib beradi, chunki siz birinchi return kalit so'zidan foydalanmoqdasiz va bu birinchi iteratsiya ichida chiqadi.

xato qayerda paydo bo'ladi?

quyidagi kod sizning döngeninizin buzilgan joyi:

 return(array_one[i] + ":" + array_two[j] + "|");

Muammoni qanday hal qilish kerak?

Note : you don't actually need a nested loop in this case because both arrays have the same length so we can simplify it.

Sizning hozirgi yechimingizni yaxshilash uchun biz mag'lubiyatga o'zgaruvchi qilib, quyidagi natijani qo'shishimiz mumkin:

function() {
  var array_one = ['ABC', 'DEF', 'GHI', 'JKL'];
  var array_two = ['179.99', '349.99', '399.99', '389'];
  var result = "";
  for (var i = 0; i < array_one.length; i++) {
     result += array_one[i] + ":" + array_two[i] + "|";
  }
  return result;
}
0
qo'shib qo'ydi
Bilishim juda yaxshi. ;)
qo'shib qo'ydi muallif Aominè, manba
Bu juda yaxshi ishlaydi. Faqat oxirgi ishlatilmaydigan '|' ni olib tashlash uchun natijani = result.slice (0, -1) qo'shdik. belgisi. Siz uchun rahmat.
qo'shib qo'ydi muallif Amy, manba

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

var arr1 = ['ABC', 'DEF', 'GHI'],
    arr2 = ['123', '45', '6789'],
    result = '';
    
    //iterate over every element from arr1 and add it into the 
    //result string with corresponding value from arr2
    arr1.forEach((v,i) => result += v + ':' + arr2[i] + '|'); 
    console.log(result.slice(0, -1)); //cut the `|` sign from the end of the string
</div> </div>
0
qo'shib qo'ydi
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