2015-08-20 2 views
-1

У меня есть массив объектов, каждый объект имеет свойство файла (строка):Javascript строка запуска равенства

Я хотел бы, чтобы сгруппировать эти объекты (на том имуществе имени файла) с таким же именованием, начиная с начала и до последнего появления знака $.

Так что я хотел бы достичь этой grupation (каждая группа должна быть новый массив):

blue$ 
blue$_35  

blue_paint$ 
blue_paint$_35 
blue_paint$_55 

01_red_carper_floor$ 
01_red_carper_floor$_and_roof 

01_red$ 

green_car$ 

Некоторые объекты будут иметь несколько, а некоторые остаются одинокими.

Я использую javascript и jquery.

Я нашел подобный вопрос, но это не совсем то же самое:

Find the longest common starting substring in a set of strings

+0

Вы можете добавить свой массив огурчик или что-то? – Andy

+0

Вы получаете последнее появление '' $ ''с [lastIndexOf] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/lastIndexOf), которое вы можете использовать для [срез] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice). Затем вы можете использовать этот срез для определения объекта в правильном массиве. – Sevanteri

ответ

1

JSFiddle

var objects = [ 
    {filename:"green$1"}, 
    {filename:"green$2"}, 
    {filename:"green$3"}, 
    {filename:"green$4"}, 
    {filename:"blue$1$1"}, 
    {filename:"blue$1"}, 
    {filename:"red$1"}, 
    {filename:"green$5"}, 
] 

var groups = []; 

for (var i = 0; i < objects.length; i++){ 
    var filename = objects[i].filename 
    var n = filename.lastIndexOf("$"); 
    var groupName = filename.substring(0, n); 
    if (groups[groupName] != undefined) 
     groups[groupName].push(objects[i]); 
    else { 
     groups[groupName] = []; 
     groups[groupName].push(objects[i]); 
    } 
} 

console.log(groups); 
Смежные вопросы