我想将产品信息存储在键值数组中,其中键是唯一的产品网址。然后我还想存储每个产品的访问频率。我将这些对象存储为window.localStorage项目,但这不是很重要。
我想到的是两个关键值数组:
//product information
prods["url"] = ["name:product_x,type:category_x,price:50"]
//product visits frequency
freq["url"] = [6]
然后我想根据频率对这些产品进行排序。
这可能吗?
希望你们能帮忙!非常感谢
答案 0 :(得分:0)
可能是这样的:
var prods = [
{url:1, val:[{name:'a',type:'x',price:60}]},
{url:2, val:[{name:'b',type:'x',price:30}]},
{url:3, val:[{name:'c',type:'x',price:50}]},
{url:4, val:[{name:'c',type:'x',price:20}]},
{url:5, val:[{name:'c',type:'x',price:10}]},
{url:6, val:[{name:'c',type:'x',price:40}]}
];
var freq = [
{url:1, freq:6},
{url:2, freq:3},
{url:3, freq:5},
{url:4, freq:2},
{url:5, freq:1},
{url:6, freq:4}
];
prods.sort(function (a, b) {
var aU = freq.filter(function(obj) {
return obj.url === a.url;
});
var bU = freq.filter(function(obj) {
return obj.url === b.url;
});
if (aU[0].freq > bU[0].freq) {
return 1;
}
if (aU[0].freq < bU[0].freq) {
return -1;
}
return 0;
});
答案 1 :(得分:0)
好吧,你似乎已经为你的数据格式/结构做了几个奇怪的选择。但是假设“prod”的格式超出了你的控制范围,你可以选择你的数据结构,这是一种方法。
而不是两个对象都使用url
作为关键字并且每个都有一个值字段,我只创建了一个对象仍然在url
上,但是每个对象的产品和频率信息都在一个字段中
对象没有任何固有的顺序,所以不是对表对象进行排序而是对键进行排序,你的“url”按升序排序。
为了表明它按照那种方式排序,我将其打印出来(不是采用相同的格式)。
对于降频,请将data[a].freq - data[b].freq
更改为data[b].freq - data[a].freq
var data = {
"url": {
prod: "name:product_x,type:category_x,price:50",
freq: 6
},
"url2": {
prod: "name:product_y,type:category_y,price:25",
freq: 3
}
};
var sorted = Object.keys(data).sort((a, b) => data[a].freq - data[b].freq);
console.log(sorted.map(k => [data[k].freq, k, data[k].prod]));
格式化数据的方法不止一种,这会改变代码的形状。