2016-12-28 16 views
0

У меня есть несколько массивов, которые я хочу объединить, но мне нужно держать их в порядке. Пример:Как объединить два массива с заказом?

var js_files = [ 
'bower_components/jquery/dist/jquery.js', 
'bower_components/jquery.cookie/jquery.cookie.js', 
'bower_components/jquery-placeholder/jquery-placeholder.js', 
'bower_components/foundation-sites/dist/foundation.js', 
'bower_components/Swiper/dist/js/swiper.jquery.min.js', 
'assets/scripts/**/*.js' 
]; 

и:

var js_files = [ 
'bower_components/jquery/dist/jquery.js', 
'parnet/bower_components/jquery/dist/jquery.js', 
'parent/bower_components/jquery.cookie/jquery.cookie.js' 
]; 

и я хочу, объединение их и убедитесь, что массив кулак будет оставаться первым & удалить повторяющиеся значения.

ожидается outotput:

['bower_components/jquery/dist/jquery.js', 
'bower_components/jquery.cookie/jquery.cookie.js', 
'bower_components/jquery-placeholder/jquery-placeholder.js', 
'bower_components/foundation-sites/dist/foundation.js', 
'bower_components/Swiper/dist/js/swiper.jquery.min.js', 
'assets/scripts/**/*.js', 
'parnet/bower_components/jquery/dist/jquery.js', 
'parent/bower_components/jquery.cookie/jquery.cookie.js'] 

Могу ли я сделать это с помощью _.union? Любая другая идея?

+0

почему вы не просто 'concat' их? – tanmay

+2

Каков ожидаемый результат? – choz

+0

@tanmay concat не будет обрабатывать повторяющиеся значения. –

ответ

1

Вы можете сделать это в моде ES5 с использованием Array.prototype.slice например:

const first = [1,2,3,4]; 
const second = [5,6,7,8]; 

const results = [].concat(first.slice(), second.slice()); 

Или мода ESNext с помощью "desctructuring"

const first = [1,2,3,4]; 
const second = [5,6,7,8]; 

const result = [...first, ...second]; 

Изменить: Я пропустил момент, что вам нужны разные ценности;

Это удалит обманы из результатов после того, как вы конкатенируете материал.

const distinctResults = results.filter(function removeDuplicates(item, index){ 

    return results.indexOf(item) === index; 
}); 
+0

Почему бы не просто' results = first.concat (second) '? – choz

+0

@Burimi 'concat' не может обрабатывать дубликаты. –

0

var a = [1,2,3]; 
 
var b = [4,5,6]; 
 

 
var Joined = [...a,...b];

Аналогично можно сделать для вашего кода.

0

просто использовать Array.prototype.concat

var js_files1 = [ 
 
'bower_components/jquery/dist/jquery.js', 
 
'bower_components/jquery.cookie/jquery.cookie.js', 
 
'bower_components/jquery-placeholder/jquery-placeholder.js', 
 
'bower_components/foundation-sites/dist/foundation.js', 
 
'bower_components/Swiper/dist/js/swiper.jquery.min.js', 
 
'assets/scripts/**/*.js' 
 
]; 
 
var js_files2 = [ 
 
'parnet/bower_components/jquery/dist/jquery.js', 
 
'parent/bower_components/jquery.cookie/jquery.cookie.js' 
 
]; 
 
var res = js_files1.concat(js_files2); 
 
console.log(res);

+0

'concat' не может обрабатывать дубликаты. –

0

_.union удалит повторяющиеся значения из вашего второго массива.

В вашем случае, если вы не имеете никакого повторяющееся значение во втором массиве так просто Concat их

Но если у вас есть какие-либо повторяющееся значение во втором массиве, _.union удалит его

например, для.

var a = [ 
    'bower_components/jquery/dist/jquery.js', 
    'bower_components/jquery.cookie/jquery.cookie.js', 
    'bower_components/jquery-placeholder/jquery-placeholder.js', 
    'bower_components/foundation-sites/dist/foundation.js', 
    'bower_components/Swiper/dist/js/swiper.jquery.min.js', 
    'assets/scripts/**/*.js' 
]; 


var b = [ 
    'bower_components/jquery/dist/jquery.js', 
    'parnet/bower_components/jquery/dist/jquery.js', 
    'parent/bower_components/jquery.cookie/jquery.cookie.js' 
]; 

_.union(a, b) приведет

[ 
    "bower_components/jquery/dist/jquery.js", 
    "bower_components/jquery.cookie/jquery.cookie.js", 
    "bower_components/jquery-placeholder/jquery-placeholder.js", 
    "bower_components/foundation-sites/dist/foundation.js", 
    "bower_components/Swiper/dist/js/swiper.jquery.min.js", 
    "assets/scripts/**/*.js", 

    "parnet/bower_components/jquery/dist/jquery.js", 
    "parent/bower_components/jquery.cookie/jquery.cookie.js" 
] 

Здесь вы можете увидеть _.union удаляет повторяющиеся значения "bower_components/jquery/dist/jquery.js" из массива B в результате

+0

с '_.union' Как я могу контролировать порядок возвращаемого массива? пока он возвращает массив, упорядоченный ABC. –

+0

Вы не можете контролировать заказ, чтобы управлять заказом, который вам нужен, чтобы написать отдельную функцию в зависимости от вашего требования. – Kenny

+0

Также укажите нужный порядок возвращаемого массива ... Сейчас «_.union вернет ожидаемый результат как вы упомянули в вопросе – Kenny

0

var js_files1 = [ 
 
'bower_components/jquery/dist/jquery.js', 
 
'bower_components/jquery.cookie/jquery.cookie.js', 
 
'bower_components/jquery-placeholder/jquery-placeholder.js', 
 
'bower_components/foundation-sites/dist/foundation.js', 
 
'bower_components/Swiper/dist/js/swiper.jquery.min.js', 
 
'assets/scripts/**/*.js' 
 
]; 
 

 
var js_files2 = [ 
 
'parnet/bower_components/jquery/dist/jquery.js', 
 
'parent/bower_components/jquery.cookie/jquery.cookie.js', 
 
"assets/scripts/**/*.js" 
 
]; 
 

 
js_files2.forEach(value => { 
 
    if (js_files1.indexOf(value) == -1) { 
 
    js_files1.push(value); 
 
    } 
 
}); 
 

 
console.log(js_files1);

1

Вы можете использовать Set в сочетании с spread syntax ... для уникальных предметов в оригинальном порядке сортировки.

var js_files1 = [ 
 
    'abc', 
 
    'def', 
 
    'bower_components/jquery/dist/jquery.js', 
 
    'bower_components/jquery.cookie/jquery.cookie.js', 
 
    'bower_components/jquery-placeholder/jquery-placeholder.js', 
 
    'bower_components/foundation-sites/dist/foundation.js', 
 
    'bower_components/Swiper/dist/js/swiper.jquery.min.js', 
 
    'assets/scripts/**/*.js' 
 
    ], 
 
    js_files2 = [ 
 
    'def', 
 
    'ghi', 
 
    'bower_components/jquery/dist/jquery.js', 
 
    'parnet/bower_components/jquery/dist/jquery.js', 
 
    'parent/bower_components/jquery.cookie/jquery.cookie.js' 
 
    ], 
 
    uniqueFiles = [...new Set([...js_files1, ...js_files2])]; 
 

 
console.log(uniqueFiles);
.as-console-wrapper { max-height: 100% !important; top: 0; }