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 基于一个数组的值筛选具有多个数组的对象_Javascript_Arrays_Object_Filter - Fatal编程技术网

Javascript 基于一个数组的值筛选具有多个数组的对象

Javascript 基于一个数组的值筛选具有多个数组的对象,javascript,arrays,object,filter,Javascript,Arrays,Object,Filter,以下是我的数据集的外观: const data = { "VS_factor": [ "FA1_n", "FA1_y", "FA2_n" ], "coord.Dim.1": [ -0.232849099744328, 0.875136458459595, -0.0810629616429348,

以下是我的数据集的外观:

const data = {
    "VS_factor": [
      "FA1_n",
      "FA1_y",
      "FA2_n"
    ],
    "coord.Dim.1": [
      -0.232849099744328,
      0.875136458459595,
      -0.0810629616429348,

    ],
    "coord.Dim.2": [
      0.0223397885030092,
      -0.0839615159119212,
      -0.334981738274959,

    ],
    "cluster": [
      0,
      5,
      0,
    ]
  }
我想根据最后一个变量的值过滤对象和其中的每个数组。在本例中,我只想保留
cluster“==5
中的值

const desired = {
    "VS_factor": [
        "FA1_y",
      ],
      "coord.Dim.1": [
        0.875136458459595,
  
      ],
      "coord.Dim.2": [
        -0.0839615159119212,
  
      ],
      "cluster": [
        5,
      ]
}

由于我无法在对象上使用
.filter
,因此我在这方面遇到了问题。有人知道如何归档所需结果的解决方案吗?

假设您要筛选不在特定索引(索引中cluster==5)的元素

const data={“VS_factor”:[“FA1_n”,“FA1_y”,“FA2_n”],“coord.Dim.1:[-0.2328490997444328,0.875136459595,-0.0810629616429348,],“coord.Dim.2:[0.0223397885030092,-.0839615159212,-.334981738274959,],“cluster:[0,5,0,],
targetCluster=5,
targetIndex=data.cluster.findIndex(c=>c==targetCluster),
result=Object.entries(data.map)([key,array])=>({[key]:[array[targetIndex]]});

console.log(result);
您可以获得预期的索引,然后进行筛选

const数据={
VS_系数:[“FA1_n”、“FA1_y”、“FA2_n”],
“坐标图1”:[-0.232849099744328,0.875136459595,-0.0810629616429348],
“坐标图2”:[0.0223397885030092,-0.0839615159119212,-0.334981738274959],
群集:[0,5,0],
}
const expectedIndex=data.cluster.findIndex((c)=>c==5)
const res=Object.fromEntries(
Object.entries(data.map(([key,value])=>[key,[value[expectedIndex]]))
)

log(res)
我将定义一个包含三个参数的筛选函数:要筛选的键、所需的值和数据对象

const filterData=(键、值、数据)=>{
常量结果={}
for(设i=0;i{
如果(!result[dataKey]){
结果[数据键]=[]
}
结果[dataKey]。推送(dataArr[i])
})
}
}
返回结果
}
此功能将在不同的键上工作,并且还将提取多个“记录”,因为有多个元素具有目标值(例如,有两个记录的
等于5)

代码做出的一些假设,如果无效,则添加一些检查:

  • 数组只包含原语值,因此可以安全地使用
    ==
    检查是否相等
  • 原始数据中的所有键都有一个具有相同条目数的数组has值
  • 作为参数传递的键实际上存在于数据中

从集群获取索引,检查是否找到该索引,否则返回没有数据的object。使用该索引迭代object.values,并将新条目推送到属性数组

const数据={
VS_系数:[“FA1_n”、“FA1_y”、“FA2_n”],
“坐标图1”:[-0.232849099744328,0.875136459595,-0.0810629616429348],
“坐标图2”:[0.0223397885030092,-0.0839615159119212,-0.334981738274959],
群集:[0,5,0],
};
函数过滤器群集id(id、数据){
设ind=data.cluster.indexOf(id);
设结果={VS_因子:[],“coord.Dim.1”:[],“coord.Dim.2”:[],簇:[];
if(ind==-1)返回结果;
Object.entries(data).forEach(([key,value])=>{
结果[key].push(值[ind]);
})
返回结果;
}

日志(filterClusterId(5,数据));
您总是希望筛选出作为键的确切1个集群条目?那么您到底尝试了什么?您不想筛选对象,而是要筛选对象的所有属性,这些属性都是数组。因此,您实际上可以对它们使用
筛选
。使用
findIndex
获得所需的索引,然后只需筛选找到的索引上的所有数组。当然,对于这种方法有很多警告,比如您可能有不同长度的数组,因此,在这种情况下,结果将是错误的。