To, czego chcę, to coś w rodzaju Array.join(separator)
, ale drugi argument to Array.join(separator, beforeLastElement)
, więc gdy powiem [foo, bar, baz].join(", ", " or")
, otrzymam "foo, bar or baz"
. Sądzę, że mógłbym napisać funkcję, która użyłaby Array.slice
do oddzielenia ostatniego elementu, ale czy jest tam jakaś dobrze znana metoda, którą mógłbym zamiast tego użyć?Czy istnieje sposób łączenia elementów w tablicy js, ale czy ostatni separator powinien być inny?
Odpowiedz
Nie, jest to wystarczająco specyficzne, że trzeba będzie napisać funkcję niestandardową. Dobra wiadomość jest taka, jak powiedziałeś, kiedy użyjesz Array.join
, aby zająć się wszystkimi separatorami, ostatnia będzie łatwa do zaktualizowania.
Czy na pewno funkcja powinna być wcześniej zdefiniowana?
var a = ['a', 'b', 'c'];
var str = a.slice(0, -1).join(',')+' or '+a.slice(-1);
budynku off odpowiedzi @ dystroy za:
function formatArray(arr){
var outStr = "";
if (arr.length === 1) {
outStr = arr[0];
} else if (arr.length === 2) {
//joins all with "and" but no commas
//example: "bob and sam"
outStr = arr.join(' and ');
} else if (arr.length > 2) {
//joins all with commas, but last one gets ", and" (oxford comma!)
//example: "bob, joe, and sam"
outStr = arr.slice(0, -1).join(', ') + ', and ' + arr.slice(-1);
}
return outStr;
}
Przykład zwyczaje:
formatArray([]); //""
formatArray(["a"]); //"a"
formatArray(["a","b"]); //"a and b"
formatArray(["a","b","c"]); //"a, b, and c"
formatArray(["a","b","c","d"]); //"a, b, c, and d"
Świetnie! Jednak mały błąd w linii 'outStr = arr.slice (0, -1) .join (',') + 'i' + arr.slice (-1);' Umieść spację po przecinku wewnątrz 'join () ' –
@AndyB oops, tak, masz rację. Dodałem teraz miejsce. Dzięki! –
Działa jak urok. :) –
Array.prototype.join2 = function(all, last) {
var arr = this.slice(); //make a copy so we don't mess with the original
var lastItem = arr.splice(-1); //strip out the last element
arr = arr.length ? [arr.join(all)] : []; //make an array with the non-last elements joined with our 'all' string, or make an empty array
arr.push(lastItem); //add last item back so we should have ["some string with first stuff split by 'all'", last item]; or we'll just have [lastItem] if there was only one item, or we'll have [] if there was nothing in the original array
return arr.join(last); //now we join the array with 'last'
}
> [1,2,3,4].join2(', ', ' and ');
>> "1, 2, 3 and 4"
Dla nodejs
webpack
i inne bundlers użytkowników: istnieje pakiet join-array
const join = require('join-array');
const names = ['Rachel','Taylor','Julia','Robert','Jasmine','Lily','Madison'];
const config = {
array: names,
separator: ', ',
last: ' and ',
max: 4,
maxMessage:(missed)=>`(${missed} more...)`
};
const list = join(config); //Rachel, Taylor, Julia, (3 more...) and Madison
- 1. Czy istnieje skuteczny sposób łączenia macierzy scipy.sparse?
- 2. Czy istnieje narzędzie do łączenia przednich plików JS w NodeJS?
- 3. Czy istnieje sposób łączenia ciągów znaków w atrybutach HTML?
- 4. Czy istnieje sposób na alias/kotwicę tablicy w YAML?
- 5. Rspec: Powinien być (ten lub inny).
- 6. Czy istnieje dobra praktyka, gdy typ powinien być zapakowany?
- 7. Czy istnieje sposób wykonywania łączenia między wieloma sesjami w sqlalchemy?
- 8. runda, ale .5 powinien być powleczony
- 9. Czy token APNS powinien być zaszyfrowany?
- 10. Czy std :: atomic powinien być lotny?
- 11. Czy istnieje sposób uruchamiania modułów RequireJS przed załadowaniem wszystkich elementów?
- 12. JavaScript - czy istnieje sposób na zniszczenie wszystkich elementów tablicy za pomocą jednego polecenia?
- 13. Czy znacznik główny Silverlight powinien być UserControl lub Canvas?
- 14. Czy diff3 powinien być domyślnym stylem konfliktu w git?
- 15. Czy istnieje prosty, ale użyteczny przykład jquery.JsPlumb?
- 16. Czy istnieje elegancki sposób na zredukowanie struktury do prostej tablicy?
- 17. Czy istnieje deklaratywny sposób przekształcania tablicy w słownik?
- 18. Czy istnieje sposób na uniezależnienie od zwykłej tablicy w Javie?
- 19. Czy Git powinien być używany do przechowywania ciągłych kompilacji integracyjnych?
- 20. Czy findviewbyid powinien być wywoływany w wątku UI?
- 21. Czy NSUserDefault nie powinien być czystym polem do testów jednostkowych?
- 22. Sprawdzanie, czy element tablicy [] istnieje
- 23. Czy istnieje sposób przekazania tablicy do currentWhen w EmberJS?
- 24. Czy istnieje sposób na zdefiniowanie stałej tablicy w PHP?
- 25. Angular js foreach zwraca tylko ostatni element w tablicy
- 26. Czy ciąg w tablicy?
- 27. RDLC Switch Construct - czy istnieje inny element?
- 28. Czy istnieje sposób, aby usunąć cały obiekt z obiektu js
- 29. Czy powinien być jeden kontroler na widok w Angularjs?
- 30. Czy domyślnie import nie powinien być bezwzględny w python27?
Należy pamiętać, że zakłada to "a.length> 1". Powinieneś również pokryć 'a.length <= 1' –
Nie jestem pewien, czy powinienem, po prostu zastanawiałem się, czy istnieje, a jeśli nie, to czy jest jakiś uzgodniony sposób robienia tego. Głupotą byłoby pisać coś innego niż wszyscy inni. –