Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_Dataset_Pattern Matching - Fatal编程技术网

Javascript 查找最接近的匹配JSON数组

Javascript 查找最接近的匹配JSON数组,javascript,arrays,json,dataset,pattern-matching,Javascript,Arrays,Json,Dataset,Pattern Matching,我有一个JSON数据集 { "a": ["73.0", "41.0", "98.0", "43.0"], "s": ["74.0", "43.0", "112.0", "44.0"], "f": ["75.0", "45.0", "116.0", "45.0"], "l": ["76.0", "47.0", "120.0", "46.0"], "x": ["77.0", "49.0", "128.0", "47.0"], "q": ["78.0", "51.0", "134.0",

我有一个JSON数据集

{
 "a": ["73.0", "41.0", "98.0", "43.0"],
 "s": ["74.0", "43.0", "112.0", "44.0"],
 "f": ["75.0", "45.0", "116.0", "45.0"],
 "l": ["76.0", "47.0", "120.0", "46.0"],
 "x": ["77.0", "49.0", "128.0", "47.0"],
 "q": ["78.0", "51.0", "134.0", "48.0"]
}
我希望与测试数据最接近匹配,例如,下面,最接近匹配是数据集中与测试数组相关的平均差异最小的数组。在本例中,最接近的匹配为“a”:[“73.0”、“41.0”、“98.0”、“43.0”]


有哪家图书馆能帮上忙?顺便说一句,在JS中执行。

您可以迭代键和项,并检查绝对差值,以获取结果数组的最接近值

var数据={a:[“73.0”、“41.0”、“98.0”、“43.0”]、s:[“74.0”、“43.0”、“112.0”、“44.0”]、f:[“75.0”、“45.0”、“116.0”、“45.0”]、l:[“76.0”、“47.0”、“120.0”、“46.0”]、x:[“77.0”、“49.0”、“128.0”、“47.0”]、q:[“78.0”、“51.0”、“134.0”、“48.0”],
测试=[“75.0”、“42.0”、“100.0”、“44.0”],
结果=对象。键(数据)。减少(函数(r,k,j){
数据[k].forEach(函数(a,i){
if(!j | | Math.abs(a-test[i])控制台日志(结果)此答案基于以下假设:

  • 您的json被解析和规范化,因此所有数组值都是数字
  • 您打算测量绝对数的差异:
    diff(a,b)=>Math.abs(a-b)
  • 您希望找到指向与最近匹配的数组的属性的
//我们将从这里得到最接近的匹配
常量parsedJson={
答:[73,41,98,43],
s:[74,43,112,44],
f:[75,45,116,45],
l:[76,47,120,46],,
x:[77,49,128,47],
问:[78,51,134,48],
};
//我们会找到最接近的匹配项
常量比较器=[75,42,100,44];
//获取所有给定数字的平均值
const avg=(…numbers)=>numbers.reduce((acc,n)=>acc+n,0)/numbers.length;
//返回具有绝对数值差的数组
//在2个给定数组中的相应索引之间
//数字。
常量差=(arr1,arr2)=>arr1.map((num,i)=>Math.abs(num-arr2[i]);
//返回包含以下数组的源的键:
//最接近谓词的匹配。
const closestMatch=(比较器,源)=>{
常量[keyOfClosestMatch]=对象
.keys(来源)
.map(key=>[key,avg(…差异(比较器,源[key])))
.reduce((目前最低点,下一个预测)=>{
返回最低点[1]document.body.innerText=`最近:${closestKey}:[${parsedJson[closestKey]}]`如何定义“最近的”?制作一个对象属性数组,然后根据贴近度标准对其进行排序。结果的第一个元素将是最接近的匹配。通过最接近的匹配,您是指严格相等的值最多还是对应属性之间的平均差异最小?是的,对应属性之间的平均差异最小。假设您比较1和10,9个差异,但差异为900%。然后比较91和100,相同的9个差异,但9%的差异。想想相对差是否比数值距离更重要。詹姆斯,谢谢,但这里数值差很重要。
{
 "t": ["75.0", "42.0", "100.0", "44.0"]
}