Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript根据不同数组中的频率对键值对进行排序_Javascript_Arrays_Sorting - Fatal编程技术网

javascript根据不同数组中的频率对键值对进行排序

javascript根据不同数组中的频率对键值对进行排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我想将产品信息存储在一个键值数组中,键值是唯一的产品url。然后我还想存储这些产品的访问频率。我将这些对象存储为window.localStorage项,但这并不重要 我想到的是两个键值数组: //product information prods["url"] = ["name:product_x,type:category_x,price:50"] //product visits frequency freq["url"] = [6] 然后我想根据频率对这些产品进行分类 可能吗 希望你们

我想将产品信息存储在一个键值数组中,键值是唯一的产品url。然后我还想存储这些产品的访问频率。我将这些对象存储为window.localStorage项,但这并不重要

我想到的是两个键值数组:

//product information
prods["url"] = ["name:product_x,type:category_x,price:50"]
//product visits frequency
freq["url"] = [6]
然后我想根据频率对这些产品进行分类

可能吗


希望你们能帮忙!非常感谢

也许是这样的:

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;
});
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}]
];
变量频率=[
{url:1,freq:6},
{url:2,freq:3},
{url:3,freq:5},
{url:4,freq:2},
{url:5,freq:1},
{url:6,freq:4}
];
产品分类(功能(a、b){
var aU=频率滤波器(功能(obj){
返回obj.url==a.url;
});
var bU=频率滤波器(功能(obj){
返回obj.url==b.url;
});
if(aU[0].freq>bU[0].freq){
返回1;
}
if(aU[0].freq
您似乎对数据格式/结构做出了一些奇怪的选择。但假设“prod”的格式超出了您的控制范围,但您可以选择数据结构,下面是一种方法

不是两个对象都使用
url
作为键,并且每个对象都有一个值字段,而是一个对象仍然键入
url
,但每个对象的产品和频率信息都在一个字段中

对象没有任何固有的顺序,所以我对键进行排序,而不是对表对象进行排序,您的“url”是按升序频率排序的

为了显示它是按这种方式排序的,我将其打印出来(格式不同)

对于递减频率,将
data[a].freq-data[b].freq
更改为
data[b].freq-data[a].freq

var数据={
“url”:{
产品:“名称:产品x,类型:类别x,价格:50”,
频率:6
},
“url2”:{
产品:“名称:产品,类型:类别,价格:25”,
频率: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])请添加一些原始数据。多个键值数组的好处是什么?为什么不创建一个将
url
映射到JavaScript对象的单键值数组呢。然后,您可以在对象上放置您想要的任何内容(例如
名称的属性
类型的属性
访问频率的属性
等)我会考虑改变这个问题的名称来排除频率的提及,因为频率排序完全是另一回事,并解释为什么你从来没有得到任何答案。