仅从javascript数组获取唯一键,其中键和值都是动态的

时间:2018-06-13 10:55:21

标签: javascript json object

这是我的对象 -

[{"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中的对象获取最后一个值和密钥对。

根据某些表现的问题我到达这里的方式是通过这段代码 -

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 :(得分:1)

您可以使用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))

答案 1 :(得分:1)

您可以使用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; }




答案 2 :(得分:1)

我将创建一个临时对象,存储最后找到的值,然后创建结果数组。



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)




答案 3 :(得分:1)

您激励我更新javascript linq library以支持.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>