Получать уникальные ключи только из массива javascript, где ключи и значение оба являются динамическими - PullRequest
0 голосов
/ 13 июня 2018

Это мой объект -

[{"index":"style_bags","name":"24"},
{"index":"style_bags","name":"25"},
{"index":"style_bags","name":"26"},
{"index":"category_gear","name":"90"},
{"index":"category_gear","name":"98"},
{"index":"price","name":"400-"}]

Это ожидается -

[{"index":"style_bags","name":"26"},
{"index":"category_gear","name":"98"},
{"index":"price","name":"400-"}]

Требуется получить последнее значение и пару ключей из объекта в javascript.

В соответствии с просьбой от Certain Performance я достиг этого через этот код -

if(href.indexOf("&") >= 0){
                    var hrefSplit = href.split('&');
                }
                if(!(href.indexOf("&") >= 0)){
                    var hrefSplit = href.split('?'); 
                    var hrefSplit2 = hrefSplit[1].split('=');                            
                }

                params.push({ index: hrefSplit2[0], name:  hrefSplit2[1]});

                var i = 0;

                jquery.each(params, function( index, value ) {

                    var key = value.index;

                    if(hrefSplit2[0] == key){
                        i++;                        
                    }  

                });

                valueGet.push({ index: hrefSplit2[0], name:  hrefSplit2[1]}); 

Я не являюсь профессионалом javascript, поэтому был не совсем понятен, как действовать дальше.

Ответы [ 4 ]

0 голосов
/ 13 июня 2018

Вы вдохновили меня на обновление библиотеки linq javascript для поддержки .last().Итак, используя эту библиотеку, вы можете:

var list = [{"index":"style_bags","name":"24"},
    {"index":"style_bags","name":"25"},
    {"index":"style_bags","name":"26"},
    {"index":"category_gear","name":"90"},
    {"index":"category_gear","name":"98"},
    {"index":"price","name":"400-"}];

var filtered = loq(list).groupBy(x => x.index).select(g => g.last());
console.log(filtered.toArray());
<script src="https://cdn.rawgit.com/biggyspender/loq/cb4e5cb4/lib/loq.min.js"></script>
0 голосов
/ 13 июня 2018

Вы можете использовать Map и собрать последний объект с тем же индексным свойством.

var array = [{ index: "style_bags", name: "24" }, { index: "style_bags", name: "25" }, { index: "style_bags", name: "26" }, { index: "category_gear", name: "90" }, { index: "category_gear", name: "98" }, { index: "price", name: "400-" }],
    result = [...new Map(array.map(o => [o.index, o])).values()];
    
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 13 июня 2018

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

let tempObj = {}

let srcArray = [
{"index":"style_bags","name":"24"},
{"index":"style_bags","name":"25"},
{"index":"style_bags","name":"26"},
{"index":"category_gear","name":"90"},
{"index":"category_gear","name":"98"},
{"index":"price","name":"400-"}];

for (let item of srcArray) {
  tempObj[item.index] = item.name
}

let result = Object.keys(tempObj).map(index => {
  return {
    index,
    name: tempObj[index]
  }
});

console.log(result)
0 голосов
/ 13 июня 2018

Вы можете использовать reduce для создания объекта и затем Object.values для получения массива значений.Последний объект будет получен на основе свойства index.

const data = [{"index":"style_bags","name":"24"}, {"index":"style_bags","name":"25"}, {"index":"style_bags","name":"26"}, {"index":"category_gear","name":"90"}, {"index":"category_gear","name":"98"}, {"index":"price","name":"400-"}]

const result = data.reduce((r, e) => Object.assign(r, {[e.index]: e}), {})
console.log(Object.values(result))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...