2016-04-05 3 views
-1

У меня есть два массиваJavaScript, сравнение того же элемента из двух массива

глава

[ "Chemistry", "Maths", "Physics" ] 

файл

[ "./pranav/Chemistry/tesgdfgdfg.md", 
    "./pranav/Chemistry/test3.md", 
    "./pranav/Chemistry/test2.md", 
    "./pranav/Physics/test45.md", 
    "./pranav/Physics/test22.md", 
    "./pranav/Maths/test2.md" 
] 

я хочу, чтобы проверить и распечатать элемент файла, который содержит элемент главы сверху вы можете видеть, что химия находится в трех элементах, поэтому я хочу напечатать, что

+0

Я попытался зацикливание как над строкой , а также пытался сравнение между массивом, но проблема, я не знаю, как проверить внутри элемента файла массива –

+3

это до сих пор неясно, на что вы хотите, чтобы результат выглядел? – JordanHendrix

+0

Я хочу поместить элемент файлов в главу, например, Элемент, относящийся к химии (массив файлов), должен попадать под химию (массив разделов) –

ответ

0

Если file ваш массив имен файлов,

file.filter((filename) => new RegExp("Chemistry").test(filename)) 

получит вам все имена файлов, которые имеют Chemistry в них в массиве:

file.filter((filename) => new RegExp("Chemistry").test(filename)) 

> ["./pranav/Chemistry/tesgdfgdfg.md", "./pranav/Chemistry/test3.md", 
    "./pranav/Chemistry/test2.md"] 

Подобная тактика может быть использована, чтобы найти те которые имеют Physics, или Math в них.


Если вы хотите расширить свой поиск, чтобы включить все строки из chapter, вы можете перебирает эти ключи в отдельности:

chapter.map(function(subject) { 
    return file.filter((filename) => new RegExp(subject).test(filename)); 
}) 

даст вам список массивов, каждый из которых содержит согласованные элементы file для каждого объекта по порядку. Обратите внимание:

chapter.map(...) 

> [[... all files with "Chemistry"...], [... all files with "Physics" ...] 
    [... all files with "Maths"...]] 

Наконец, если вы хотите создать простой объект из них, так что вы можете отобразить каждый subject в соответствующих его имен файлов, вы можете сделать:

var result = {}; // create empty object 
for (subject of chapter){ 
    result[subject] = file.filter((filename) => new RegExp(subject).test(filename)); 
} 

result 
> {"Chemistry" : [... all files with "Chemistry" ...], ... } 

или альтернативно посмотреть на the many ways to merge two arrays into an object together.

+0

Я хочу сравнить два массива . Химия была просто примером из массива. Глава –

+0

. Ваш вопрос далека от ясного. Как это не соответствует вашим потребностям? –

+0

@PranavKaushik Обновлено на основе информацию, которую вы предоставили. После того, как у вас есть объект, итерация через его ключи и значения относительно проста. –

0

Вы можете просто использовать функцию и пропустить через
файловый массив, чтобы получить массивы для всех элементов массива файлов.
Каждый массив будет иметь имя поискового термина (например, «Химия»).
Я бы предложил сделать это lowercase.

file = ["./pranav/Chemistry/tesgdfgdfg.md", 
 
    "./pranav/Chemistry/test3.md", 
 
    "./pranav/Chemistry/test2.md", 
 
    "./pranav/Physics/test45.md", 
 
    "./pranav/Physics/test22.md", 
 
    "./pranav/Maths/test2.md" 
 
]; 
 

 
chapter = ["Chemistry", "Maths", "Physics"]; 
 

 
function getMatching(x) { 
 
    this[x] = new Array(); 
 
    file.forEach(function(e) { 
 
    if (e.indexOf(x) >= 0) { 
 
     this[x].push(e); 
 
    } 
 
    }) 
 
    return this[x]; 
 
} 
 

 
document.write(JSON.stringify(getMatching("Chemistry")));

+0

Это просто печать массива файлов –

+0

Я не хочу это должно быть только для химии –

+0

Химия ==== >>> все файлы, содержащие химию так же, как и для каждого предмета в главе, а также этот список является динамическим, поэтому некоторый элемент будет добавлен или удален, поэтому я хочу его для каждого элемента массива –

Смежные вопросы