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
获得所需的索引,然后只需筛选找到的索引上的所有数组。当然,对于这种方法有很多警告,比如您可能有不同长度的数组,因此,在这种情况下,结果将是错误的。