2017-02-22 42 views
7

wejściowa:Concat tablica na jednej tablicy (JS lub Lodash)

var array1 = ["12346","12347\n12348","12349"]; 

kroki:

Wymień \n z ',' i Dodaj do listy.

wyjściowa:

var array2 = ["12346","12347","12348","12349"]; 

Próbowałem poniżej logiki, ale nie dotrzeć do wyjścia. Wygląda na to, że czegoś brakuje.

var array2 = []; 

_.forEach(array1, function (item) {    
     var splitData = _.replace(item, /\s+/g, ',').split(',').join(); 
     array2.push(splitData); 
}); 

Wyjście z mojego kodu:

["12346","12347,12348","12349"] 

Odpowiedz

10

Można dołączyć go z nową linią '\n' i podzielić ją przez nową linią na wynik.

var array= ["12346", "12347\n12348", "12349"], 
 
    result = array.join('\n').split('\n'); 
 

 
console.log(result);

+0

świetny pomysł najlepsze wykorzystanie :) –

+0

Superb ... Rozwiązanie pracuje dla mnie ... dziękuję. –

+0

Czy możemy uniknąć duplikatów? jeśli wejście posiadające kilka duplikatów, takich jak 'tablica var = [" 12346 "," 12347 \ n12348 "," 12349 "," 12348 "]' –

1

Alternatywną do @ odpowiedź Niny byłoby użyć Array.push.apply z string.split(/\n/)

var array= ["12346","12347\n12348","12349"]; 
 
var result = [] 
 

 
array.forEach(function(item){ 
 
    result.push.apply(result, item.split(/\n/)) 
 
}) 
 

 
console.log(result);

3

Jeśli używasz lodash, stosując flatmap byłoby najprostszy wa Y:

var array1 = ["12346", "12347\n12348", "12349"]; 
 
var array2 = _.flatMap(array1, (e) => e.split('\n')); 
 

 
console.log(array2); 
 
//=> ["12346", "12347", "12348", "12349"]
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>