Javascriptda mag'lubiyatga ega bo'lmagan natija bilan qatorga qanday qo'shilishim mumkin?

[1,2,3,4,5,6] qatori va '' ~ ' qatori mavjud va ularni bilan yangi qatorga qo'shishni xohlayman > '~' ajratuvchisi bo'lib hisoblanadi.

Men chiqishni [1, '~', 2, '~', 3, '~', 4, '~', 5, '~', 6] bo'lishi kerak.

Lodash dan foydalanib quyidagilarga ega bo'ldim:

var my_array = [1,2,3,4,5,6]
var separator = '~'
_.flatten(_.zip(my_array, new Array(my_array.length).fill(separator)))

Lekin bu yomon ko'rinadi va menimcha yaxshi yo'l bor.

EDITOR: Yuqoridagi qator int ga ega bo'lsa-da, bu har qanday ob'ekt uchun ishlashni xohlayman.

1
Savol o'chirilgan, lekin bitta satr ES6 bo'lishi mumkin: var r = Array.from ({length: (a.length * 2) - 1}, (v, i) => i% 2? : - bu sizning katalogingiz va s - sizning "~" dir. Codepen: codepen.io/cjke/pen/pejPOQ?editors=0010
qo'shib qo'ydi muallif Chris, manba
Bir oz zerikdim - bu erda yana qisqaroq: var r = a.reduce ((c, v) => [... c, v, s], []) -1) Codepen: codepen.io/cjke/pen/WpQPKz?editors = 0010
qo'shib qo'ydi muallif Chris, manba
"... lekin uzunlikda qo'lda -1 vazifasini bajaradi ..." Xo'sh?
qo'shib qo'ydi muallif T.J. Crowder, manba
Nima uchun faqat oddiy oddiy loop emas?
qo'shib qo'ydi muallif T.J. Crowder, manba
@AgamRafaeli Men buni butun bir emas, balki qatoridagi barcha narsalarga nisbatan bir narsa deb bilaman.
qo'shib qo'ydi muallif user19894, manba
join - bu simmetriya uchun xos bir tanaffusga ega bo'lganligi uchun amalga oshirish uchun yomon operatsiya.
qo'shib qo'ydi muallif user19894, manba
@ T.J.Crowder buning aslida oddiy bo'lishi uchun loop my_array.length - 1 marta ishlashi kerak. Yo'q, yo'qmi?
qo'shib qo'ydi muallif Agam Rafaeli, manba
@SurSaraf simmetriyaning uzilishi bilan nima demoqchisiz?
qo'shib qo'ydi muallif Agam Rafaeli, manba
Chiroyli oddiy pastadir bu ishni bajaradi, lekin uzunlikdagi qo'lda -1 ni bajarishi kerak. Bir oz go'zalroq narsalarni qidiryapman.
qo'shib qo'ydi muallif Agam Rafaeli, manba

7 javoblar

Nima uchun Javascriptda pul yo'q:

Minor Update: to account for values greater then 9

  • first join it to a string my_array.join("~")
  • then split every char .split(/\b/gi)

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

var my_array = [1,2,3,4,5,6,10,11]
var separator = '~'

console.info(my_array.join("~").split(/\b/gi));
</div> </div>

Yangilash (hatto yopiq bo'lsa ham):

Nuqtai nazarda, boshqa ob'ektlar. Bu bir maromda bo'lsa ham ishlashi kerak.

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

var myArray = [1,2,3,45,6,10,new Date()];

var newArray = myArray.reduce((p,n)=>{ 
  if(p.length){
    p.push("~");
  }
  p.push(n);
  return p;
},[]);

console.info(newArray)
</div> </div>
8
qo'shib qo'ydi
Bu ketma-ketlik, masalan, toString-ga ega bo'lmasa, bajarilmaydi.
qo'shib qo'ydi muallif Benjamin Gruenbaum, manba
Masalan, 10 yoki undan kattaroq yoki 0 dan kamroq qiymat yoki raqamdan boshqa narsa bo'lishi bilanoq, yoki, yoki. ..
qo'shib qo'ydi muallif T.J. Crowder, manba
Un huh, bu sizning yangilashingizdan 10 daqiqa oldin (va aniq).
qo'shib qo'ydi muallif T.J. Crowder, manba
Shunga qaramay, ko'plab boshqa qobiliyatsiz usullar bilan shug'ullanish dahshatli usul (bu salbiy raqamlar ham aytib o'tganman).
qo'shib qo'ydi muallif T.J. Crowder, manba
@ T.J.Crowder endi u 10 va undan yuqori ish bilan ishlashi kerak
qo'shib qo'ydi muallif winner_joiner, manba
Fikrlarni o'zgartirsangiz @ T.J.Crowder, to'g'ri javob berishning iloji yo'q.
qo'shib qo'ydi muallif winner_joiner, manba
Bundan tashqari, ob'ektlarning har biri uchun toString dasturini yaxshi deb hisoblaydi.
qo'shib qo'ydi muallif Agam Rafaeli, manba

Juda oddiy forEach uchun o'nlab vaqtinchalik qatorlarsiz va boshqalar.

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

var my_array = [1,2,3,4,5,6];
var result = [my_array[0]];
my_array.forEach(function(entry, index) {
  if (index > 0) {
    result.push("~", entry);
  }
});
console.log(result);
</div> </div>

Yoki agar agar bitta vaqtinchalik qatordan qutulsangiz:

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

var my_array = [1,2,3,4,5,6];
var result = [my_array[0]];
my_array.slice(1).forEach(function(entry, index) {
  result.push("~", entry);
});
console.log(result);
</div> </div>
5
qo'shib qo'ydi
@AgamRafaeli: Bu qatorda kamida bitta yozuvni qabul qiladi, shuning uchun agar bu taxmin bekor bo'lsa, var natija ... qatori var result = my_array.length? [my_array [0]]: []; :-)
qo'shib qo'ydi muallif T.J. Crowder, manba
FTW !! Rahmat!!
qo'shib qo'ydi muallif Agam Rafaeli, manba

Faqatgina shlyapamga:

arr.map(x => [x, '~']).reduce((p, c) => p.concat(c));

Bu juda hacky emas, u har bir elementni ikkita elementga ajratadi va ularni bir-biriga bog'laydi, umumlashtirilishi juda oson:

const intercalate = (arr, sep) => arr.map(x => [x, sep])
                                     .reduce((p, c) => p.concat(c))
                                     .slice(0, -1);

Yoki bir marta kamaytirish:

const intercalate = (arr, sep) => arr.reduce((p, c) => p.concat(c, sep)).slice(0, -1);
3
qo'shib qo'ydi
arr = [1,2,3] uchun bu [1, "~", 2, "~", 3, "~"] funksiyasini qaytaradi. Ehtimol, oxirida tilim (0, -1) qo'shasizmi?
qo'shib qo'ydi muallif Agam Rafaeli, manba

Bu erda forEach dan foydalangan holda bir variant -

var a = [1,2,3]
var sep = '~'
var b = []
a.forEach(function(x) { b.push(x, sep) })
b.pop()//remove the last `~`
2
qo'shib qo'ydi

_.flatMap dan foydalanib,

var my_array = [1,2,3,4,5,6];
var separator = '~';
console.log(_.flatMap(my_array, function( v ){ return [v,separator] }).slice(0,-1));

Yangilash:

~ olib tashlandi.

1
qo'shib qo'ydi
Bu esa ~ ni qoldiradi
qo'shib qo'ydi muallif RaR, manba

Siz Array # va agar kerak bo'lsa, bir tildagi kontaktni tanlang.

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

var array = [1, 2, 3, 4, 5, 6],
    result = array.reduce(function (r, a, i) {
        return r.concat(i ? '~' : [], a);
    }, []);
    
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
</div> </div>

Anosther proposal with Array#forEach

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

var array = [1, 2, 3, 4, 5, 6],
    result = [];

array.forEach(function (a) {
   result.push(a, '~');
});

result.length--;
    
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
</div> </div>
0
qo'shib qo'ydi
Bu barcha keraksiz vaqtinchalik qatorlar !!
qo'shib qo'ydi muallif T.J. Crowder, manba

loop uchun an'anaviy kodni ishlatish

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

var nums = [1,2,3,4,5,6];
var dash = '~';

var res = [];
for (var i=0; i
</div> </div>
0
qo'shib qo'ydi
Kechirasiz, tuzatildi.
qo'shib qo'ydi muallif Idan, manba
[1, "~", 2, "~", 3, "~", 4, "~", 5, "~", 6, "~"] "~", 2, "~", 3, "~", 4, "~", 5, "~", 6]
qo'shib qo'ydi muallif Agam Rafaeli, 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