Birgalikda tarqalgan javascript

Menda qator bor deb o'ylayman:

['a','b','c','d','e','f','g','h','i','j']

Yuqoridagi ketma-ketlikning kichikroq teng bir qismli qismlarga bo'linishini istayman

N = 2 => ['a', 'c', 'e', 'f', 'h', 'j'], ['b', 'd', 'f', 'g', 'i'] 
N = 3 => ['a', 'd', 'g', 'j'], ['b', 'e', 'h'], ['c', 'f', 'i']
N = 4 => ['a', 'e', 'i'], ['b', 'f', 'j'], ['c', 'g'], ['d', 'h']

Bunga qanday erishishim va 0 (n) murakkablikni boshdan kechirishim mumkin?

1
Iltimos, ushbu masalani o'zingiz hal qilish uchun qanday harakatlar qilganingizni ko'rsating.
qo'shib qo'ydi muallif haxxxton, manba
qo'shib qo'ydi muallif 4castle, manba
@TelvinNguyen Bu haqda qanday farq bor?
qo'shib qo'ydi muallif 4castle, manba
@ 4castle: Hechqisi yo'q
qo'shib qo'ydi muallif Telvin Nguyen, manba
@ 4castle: Har bir to'pning ichidagi narsalar tartibi
qo'shib qo'ydi muallif Telvin Nguyen, manba

7 javoblar

O (n):

const input = ['a','b','c','d','e','f','g','h','i','j'];
const n = 3;
const result = input.reduce((result, item, itemIndex) => {
  result[itemIndex % n] = (result[itemIndex % n] || []).concat(item);

  return result;
}, []);

console.log(result);
2
qo'shib qo'ydi
Bu noto'g'ri chiqdi.
qo'shib qo'ydi muallif 4castle, manba
Qo'shimcha kod % n qaerga ketdi? tahrirlangan.
qo'shib qo'ydi muallif Dan O, manba

Men bundan keyin Dan O ishonardi:

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

const input = ['a','b','c','d','e','f','g','h','i','j'];
const n = 3;
const result = input.reduce((result, item, itemIndex) => {
  result[itemIndex % n] = (result[itemIndex % n] || []).concat(item);

  return result;
}, []);

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

Ammo undan samarali bo'lgan - O (n):

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

const input = ['a','b','c','d','e','f','g','h','i','j'];
const n = 3;
const result = input.reduce((result, item, itemIndex) => {
  var idx = itemIndex % n;
  if (!result[idx])
    result[idx] = [];
  result[idx].push(item);
  return result;
}, []);

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

Siz o'zingizning dastlabki qatorni va kerakli qismlar sonini parametr sifatida qabul qiluvchi funktsiyani yaratishingiz mumkin. Yutug'ining kaliti, modulo dan foydalanish, returnArray indeksini elementni joylashtirishni aniqlash uchun ishlatiladi.

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

var origArr = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];

function evenChunk(chunks, inputArr) {
  var returnArray = [];
 //cycle through out inputArr progressively filling each returnArray array
  for (var x = 0, len = inputArr.length; x < len; x++) {
    var selectedIndex = x % chunks;//find the expected index
   //if the index is undefined, instantiate it
    if (!returnArray[selectedIndex]){
      returnArray[selectedIndex] = [];
    }
   //push the array element at the modulo position of x onto the selectedIndex array
    returnArray[selectedIndex].push(inputArr[x]);
  }
  return returnArray;
}

console.log(evenChunk(2, origArr));
console.log(evenChunk(3, origArr));
console.log(evenChunk(4, origArr));
.as-console-wrapper{max-height: 100% !important; top: 0;}
</div> </div>
1
qo'shib qo'ydi
@ 4castle, taklif qilingan ish faoliyatini yaxshilash uchun javobimni yangilayman
qo'shib qo'ydi muallif haxxxton, manba
@TelvinNguyen Ushbu javobdagi algoritm tanlangan javob bilan bir xil. kamaytirish har bir element orqali qaytaradi.
qo'shib qo'ydi muallif 4castle, manba
@TelvinNguyen Ushbu javobda if (! ReturnArray [selectedIndex]) bo'lsa, if
qo'shib qo'ydi muallif 4castle, manba
Har bir element orqali nashr etilayotgan narsa men izlayotgan narsa emas. Baribir yordamingiz uchun rahmat.
qo'shib qo'ydi muallif Telvin Nguyen, manba
@ 4castle Ular xuddi shunday, lekin mening testimdan tanlangan javobning bajarilishi (2-usul) yanada samaraliroq. (N = 3/4/5 ning namunaviy sinovi uchun 400-900 va 600-1k2 milodiy javob). Shaxsan men, albatta, yaxshiroq yoki ehtimol noto'g'ri ekanligimni tushuntirish uchun mutaxassisi yo'q, ammo men faqatgina amaliy sinovga murojaat qilyapman.
qo'shib qo'ydi muallif Telvin Nguyen, manba
Chiqish yaxshilandi, N = 5 uchun taxminan 500-850 millimetr.
qo'shib qo'ydi muallif Telvin Nguyen, manba

Mana, bu muammoning echimi. Bu ketma-ket bag to'ldiruvchidir. Agar siz funktsiyani qo'yish kerak bo'lsa, dastlabki ikki qator parametrlar va oxirgi satr qaytariladi.

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

    var a = ['a','b','c','d','e','f','g','h','i','j'];
    var n = 3;//n is number of blocks
    
    var l = a.length; var v = Math.floor(l/n);
    var c = 0; var i = -1; var r = []; var p = [];
 
    while(true){
      i=i+1; if (i==l) {
        r[r.length-1] = r[r.length-1].concat(p);
        break;
      }
      p.push(a[i]);
      c=c+1;
      if (c==v){
        r = r.concat([p]);
        p=[]; c=0;
      }
    }
    
    console.log(r);//r is the result
</div> </div>
0
qo'shib qo'ydi

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

var arr = ['a','b','c','d','e','f','g','h','i','j'];

function split(arr, N) {
  var counter = 1;
  return arr.reduce(function(obj, item) {
    if(counter > N) counter = 1;
    if(!obj[counter]) obj[counter] = [];
    obj[counter].push(item);
    counter++
    return obj;
  }, [])
};

var result = split(arr, 4);
console.log(result);
</div> </div>
0
qo'shib qo'ydi

Buni ko'ring:

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

var test = ['a','b','c','d','e','f','g','h','i','j'];

function chunkArray(array, n) {
  if(n === 1) return array;
  return array.reduce(function(result, item, index) {
    result[index%n] = (result[index%n] || []).concat(item);
    return result;
  }, []);
}

console.log(chunkArray(test, 1));
console.log(chunkArray(test, 2));
console.log(chunkArray(test, 3));
console.log(chunkArray(test, 4));
console.log(chunkArray(test, 5));
</div> </div>
0
qo'shib qo'ydi

Siz shunday bir narsani sinab ko'rishingiz mumkin, bu oddiygina ajratilgan qatorni qabul qiladigan funksiya bo'lib, elementlarning sonini qo'lda sozlamasdan, teng taqsimlangan qatorlar majmuasini qaytaradi.

    var splitArr = function (arr) {
    var numOfElements = Math.floor(Math.sqrt(arr.length));
    var newArr = [];
     while (arr.length > 0) {
       newArr.push(arr.splice(0,numOfElements))
     }
     return newArr;
   }

console.log(splitArr(arr));
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