Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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 对json数组排序,首先按搜索文本和剩余结果的字母顺序排序_Javascript_Arrays_Json_Sorting - Fatal编程技术网

Javascript 对json数组排序,首先按搜索文本和剩余结果的字母顺序排序

Javascript 对json数组排序,首先按搜索文本和剩余结果的字母顺序排序,javascript,arrays,json,sorting,Javascript,Arrays,Json,Sorting,我有一个json数组,我需要首先根据一些搜索文本对其进行缩写,然后按字母顺序进行缩写。所以基本上在下面的数组中,如果我搜索“BeAU”< /强>从BAU开始的所有事物都应该保持在顶部(按字母顺序排序),剩下的结果也会按字母顺序排序(即使我们在文本中间的某处有搜索文本),并且应该在“”之后开始。 需要Javascript解决方案 数组: [ { "value": "1", "text": "BEAUMONT Habitati

我有一个json数组,我需要首先根据一些搜索文本对其进行缩写,然后按字母顺序进行缩写。所以基本上在下面的数组中,如果我搜索<强>“BeAU”< /强>从BAU开始的所有事物都应该保持在顶部(按字母顺序排序),剩下的结果也会按字母顺序排序(即使我们在文本中间的某处有搜索文本),并且应该在“

”之后开始。 需要Javascript解决方案

数组:

[
{
 "value": "1",
 "text": "BEAUMONT Habitation 54"
},
{
 "value": "2",
 "text": "BEAUMONT Place de Renival"
},
{
 "value": "3",
 "text": "BEAUMONT Rue des Tiennes"
},
{
 "value": "4",
 "text": "BEAUMONT Rue Grand Chemin"
},
{
 "value": "5",
 "text": "BRUYERES Chênes"
},
{
 "value": "6",
 "text": "CEROUX Cabine"
},
{
 "value": "7",
 "text": "CEROUX Chapelle aux Sabots"
},
{
 "value": "8",
 "text": "CEROUX Place Communale"
},
{
 "value": "9",
 "text": "CEROUX Quatre Bras"
},
{
 "value": "10",
 "text": "Station Jambeaux"
},
{
 "value": "11",
 "text": "Reseau Street"
},
{
 "value": "12",
 "text": "beaux street"
}
]

编辑

这很好,但在另一种情况下,我将这些数据转换成这样的形式,这种方式不起作用

   {
      "item":{
         "value":"1558",
         "text":"BEAUMONT Habitation 54"
      },
      "refIndex":0,
      "matches":[
         {
            "indices":[
               [
                  0,
                  1
               ]
            ],
            "value":"BEAUMONT Habitation 54",
            "key":"text"
         }
      ],
      "score":0.018533147937493524
   },
   {
      "item":{
         "value":"1560",
         "text":"BEAUMONT Place de Renival"
      },
      "refIndex":3,
      "matches":[
         {
            "indices":[
               [
                  0,
                  1
               ]
            ],
            "value":"BEAUMONT Place de Renival",
            "key":"text"
         }
      ],
      "score":0.03162277660168379
   }
]
为了让它工作,我对代码做了一些修改,但似乎不起作用

function sortByInput(data, input = null) {
  if (!input) {
    return data.sort((a, b) => a.item.text.localeCompare(b.item.text));
  }
  
  return data.sort((a, b) => {
    const regex = new RegExp(`(^${input})`, "i");
    const aMatch = regex.test(a.item.text);
    const bMatch = regex.test(b.item.text);

    if (aMatch || bMatch) return -aMatch + bMatch;

    return a.item.text.localeCompare(b.item.text);
  });
}

最基本的解决方案是使用默认的Javascript方法并传递您自己的比较函数


在下面的示例中,我检查是否有
输入
,并根据这一点,我只按字母顺序排序,或者按
输入
排序(如果元素以
输入
开头,则使用正则表达式进行检查),然后按字母顺序排序

const数据=[
{值:“1”,文本:“博蒙特居住区54”},
{价值:“2”,文字:“博蒙特雷尼瓦尔广场”},
{价值:“3”,文字:“博蒙特蒂安街”},
{值:“4”,文本:“博蒙特街大化工”},
{值:“5”,文本:“BRUYERES Chênes”},
{值:“6”,文本:“CEROUX Cabine”},
{值:“7”,文本:“CEROUX Chapelle aux Sabots”},
{值:“8”,文本:“CEROUX Place Communiale”},
{值:“9”,文本:“CEROUX Quatre Bras”},
{值:“10”,文本:“Jamboaux车站”},
{值:“11”,文本:“Reseau Street”},
{值:“12”,文本:“beaux street”}
];
函数sortByInput(数据,输入=null){
如果(!输入){
返回data.sort((a,b)=>a.text.localeCompare(b.text));
}
返回数据。排序((a,b)=>{
常量regex=newregexp(`(^${input})`,“i”);
常量aMatch=regex.test(a.text);
常量b匹配=正则表达式测试(b.text);
if(aMatch | | bMatch)返回-aMatch+bMatch;
返回a.text.localeCompare(b.text);
});
}

log(sortByInput([…数据],“ceroux”)嘿,Johannes,谢谢你的回答,这似乎很好,但我有另一种情况,这不起作用,请检查编辑。我已经走了很长的路,但这似乎是一种更优化的方式来做它和工作,谢谢你有两组不同的数据,一个是仅包含
文本
的对象数组,另一个是包含
文本
的具有各种其他属性和
的对象数组。我们应该尝试对哪组数据进行排序?嗨,Dane,我需要根据字母“text”的值对数组进行排序。例如,如果索引中的某个项的文本以“a”开头,则该索引的索引(0)应高于“b”(1),以此类推。在编辑中,您引用的是a.text,而不是a.item.text。这是一个拼写错误,已更改,但仍然不起作用