У меня есть поиск (статический), как,

LookupValue = ['Something: A', 'Something: B', 'Something: C', 'Something: D: Classified Group 1', 'Something: D: Classified Group 2', 'Something: D: Classified Group 3', 'Anything: X', 'Anything: Y']

Код идет сюда, чтобы отобразить семейство поиска и его значение,

MapValue = LookupValue().reduce(function (map, item) {
            var key = item.split(':')[0];
            map[key] = map[key] || [];
            map[key].push(item.split(':')[1] || []);            
            return map;
        }, {});

Фактический результат:

MapValue
{...}
    __proto__: {...}
    Something: [ A, B, C, D, D, D]
    Anything: [X, Y]

Ожидаемый результат:

MapValue
{...}
    __proto__: {...}
    Something: [ A, B, C, D: Classified Group 1, D: Classified Group 2, D: Classified Group 3]
    Anything: [X, Y]

Есть ли возможность использовать это как map[key].push(item.splitAtFirst(':')[1] || [])

Любое предложение по этому вопросу было бы очень полезно.

0
Jeya Suriya Muthumari 4 Апр 2017 в 16:19

2 ответа

Лучший ответ

Это может помочь вам,

MapValue = LookupValue.reduce(function (map, item) {
        var key = item.split(':')[0];
        map[key] = map[key] || [];
        map[key].push(item.substring(key.length + 1) || []); // Change is here
        return map;
    }, {});

Split() даст вам массив строк. Вместо того, чтобы специально сказать, что нужно взять второй элемент (key[1]), вы можете удалить первый элемент, который является ключом (+1 for ':'), из исходной строки (item)

1
RaR 4 Апр 2017 в 13:24

С Лодаш:

 var grouped = _.groupBy(LookupValue,q=>q.substring(0,q.indexOf(':')))
    Object.keys(grouped).forEach(key=>{  grouped[key] = grouped[key].map(x=>x.substring(x.indexOf(':')+1,x.length).trim())})
0
Mesut Yiğit 4 Апр 2017 в 13:36