2016-01-21 3 views
0

Я предпочитаю решение подчеркивания для этого, если это возможно, но я возьму решение VanS JS, если это лучшее, что я могу получить.Как вы используете underscore.js для редактирования строки в массиве объектов, у которых есть пара значений строки?

Я хочу использовать массив 2 для редактирования строк в объектах array1, которые начинаются с или заканчиваются строками в массиве2. В результате я ищу можно увидеть в результатах array3 ниже:

array1 = [{key1: "Patty Bakery", key2: stuff}, {key1: "Bob Wine Shack", 
key2: mattersNot}, {key1: "Romeo Clothing", key2: things}, {key1: 
"StackIt", key2: finished}]; 

array2 = ["Patty", "Romeo", "Wine Shack"]; 

array3 = [{key1: "Bakery", key2: stuff}, {key1: "Bob", 
key2: mattersNot}, {key1: "Clothing", key2: things}, {key1: 
"StackIt", key2: finished}]; 

До сих пор лучшее, что я мог сделать, это удалить весь объект в array1 с этим кодом:

array1.filter(function(a){ 
return!_.some(array2, function(b){ 
return startsWith(a.key1, b)})}) 
//I have installed and am using underscore.string 

, который дает мне array3, который выглядит как

array3 = [{key1:"StackIt", key2: finished}]; 
+1

являются строки, которые вы хотите изменить всегда под ключом 'key1' или они могут отличаться? –

+0

@MartinSchneider хороший вопрос - они всегда под ключ1. – rashadb

+1

Что, если строка будет «Patty Whine Shack Romeo»? Должен ли скрипт выйти после удаления только Patty или сделать это до тех пор, пока не будет никаких дополнительных условий, которые нужно удалить и, таким образом, вернуть пустую строку? –

ответ

1

Вы можете использовать Regex для шаблона, начиная с или заканчивая.

Ниже приведен фрагмент, изображающий же

var array1 = [{ 
 
    key1: "Patty Bakery", 
 
    key2: "stuff" 
 
}, { 
 
    key1: "Bob Wine Shack", 
 
    key2: "mattersNot" 
 
}, { 
 
    key1: "Romeo Clothing", 
 
    key2: "things" 
 
}, { 
 
    key1: "StackIt", 
 
    key2: "finished" 
 
}]; 
 

 
var array2 = ["Patty", "Romeo", "Wine Shack"]; 
 
var array3 = []; 
 
array2.forEach(function(item) { 
 
    
 
    var startWithReg = new RegExp("^" + item); 
 
    var endsWithReg = new RegExp(item + "$"); 
 
    
 
    console.log(startWithReg) 
 
    
 
    array3 = array1.map(function(row) { 
 
    
 
    row.key1 = row.key1.replace(startWithReg, '').trim(); 
 
    row.key1 = row.key1.replace(endsWithReg, '').trim(); 
 
    return row; 
 
    
 
    }); 
 
}) 
 

 
console.log(array3)

+0

Хорошее решение, но в итоге я получаю дополнительное пространство на передней или задней панели. Не могли бы вы помочь мне очистить это? – rashadb

+1

Вы можете добавить '.trim()' Я обновлю свой ответ – Rajesh

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