如何过滤多维JavaScript数组
我有以下数据:如何过滤多维JavaScript数组,javascript,arrays,json,filter,multidimensional-array,Javascript,Arrays,Json,Filter,Multidimensional Array,我有以下数据: var object = [{ "nid": "31", "0": { "tid": "20", "name": "Bench Press", "objectDate": "2012-02-08", "goal": "rep", "result": "55.00", "comments": "sick!", "maxload": "250" },
var object = [{
"nid": "31",
"0": {
"tid": "20",
"name": "Bench Press",
"objectDate": "2012-02-08",
"goal": "rep",
"result": "55.00",
"comments": "sick!",
"maxload": "250"
},
"1": {
"tid": "22",
"name": "Back Squat",
"objectDate": "2012-02-08",
"goal": "time",
"result": "8.00",
"comments": "i was tired.",
"maxload": "310"
}},
{
"nid": "30",
"0": {
"tid": "19",
"name": "Fran",
"objectDate": "2012-02-07",
"goal": "time",
"result": "5.00",
"comments": null
}}];
我想按名字过滤它。例如,如果我对名称“Fran”应用过滤器,我希望有如下内容:
[0] => Array
(
[tid] => 19
[name] => Fran
[objectDate] => 2012-02-07
[goal] => time
[result] => 5.00
[comments] =>
)
[1] => Array
(
[tid] => 19
[name] => Fran
[objectDate] => 2012-02-08
[goal] => rep
[result] => 55.00
[comments] => woohoo!
)
有可能实现吗
问题是关于多维数组的。如果你喜欢我错过了,这里是普通阵列的解决方案
2020年
filteredArray = array.filter(item => item.name.indexOf('Fran') > -1);
或
2012版
var result = [];
for (var i = 0; i < array.length; i++)
{
if (array[i].name === 'Fran')
{
result.push(array[i]);
}
}
var结果=[];
对于(var i=0;i
我将创建一个过滤功能:
function filter(array, key, value){
var i, j, hash = [], item;
for(i = 0, j = array.length; i<j; i++){
item = array[i];
if(typeof item[key] !== "undefined" && item[key] === value){
hash.push(item);
}
}
return hash;
}
Javascript中没有用于此的函数。您必须像这样编写自己的函数
var arr = [{"nid":"31","0":{"tid":"20","name":"Bench Press","objectDate":"2012-02-08","goal":"rep","result":"55.00","comments":"sick!","maxload":"250"},"1":{"tid":"22","name":"Back Squat","objectDate":"2012-02-08","goal":"time","result":"8.00","comments":"i was tired.","maxload":"310"}},{"nid":"30","0":{"tid":"19","name":"Fran","objectDate":"2012-02-07","goal":"time","result":"5.00","comments":null}}];
function filterByProperty(array, prop, value){
var filtered = [];
for(var i = 0; i < array.length; i++){
var obj = array[i];
for(var key in obj){
if(typeof(obj[key] == "object")){
var item = obj[key];
if(item[prop] == value){
filtered.push(item);
}
}
}
}
return filtered;
}
var byName = filterByProperty(arr, "name", "Fran");
var byGoal = filterByProperty(arr, "goal", "time");
var arr=[{“nid”:“31”,“0”:“{“tid”:“20”,“姓名”:“台式机”,“目标日期”:“2012-02-08”,“目标”:“rep”,“结果”:“55.00”,“评论”:“sick!”,“maxload”:“250”},“1”:“{“tid”:“22”,“姓名”:“后蹲”,“objectDate”:“2012-02-08”,“目标”:“时间”,“结果”:“8.00”,“评论”:“我很累”,“maxload”:“310”},{“nid”:“30”,“0”:“19”,“objectDate“2012-02-07”,“目标”:“时间”,“结果”:“5.00”,“注释”:null}}];
函数filterByProperty(数组、属性、值){
var筛选=[];
对于(var i=0;i
最大的技巧是制作一个平面阵列,其中包含您想要的项目
假设您有一个二维数组,如下所示:
e = [[1,2],[1,2],[2,3],[4,5],[6,7]]
创建一个新数组:
var f = []
只需填写一项:
for(var x=0;x<e.length;x++) f[x] = e[x][1]
然后
var g = e.filter( function(elem, pos){ return (f.indexOf(elem[1]) == pos) })
cowabunga!我尝试了二极管的解决方案。我适合我的情况。包括3个阵列
var arr =
[
{
taskTypeGroupId: "EXP.CONT", taskTypeGroupName: "Contradictoire",
taskType:
{
taskTypeId: "DGE-EXPCONT", taskTypeName: "Dégats des eaux contradictoire", defaultDuration: 60, isInProject: false,
dataItems:
{
id: "EXTRAFILLER5", label: "Divers 5"
}
}
},
{
takTypeGroupId: "EXPQUAL", taskTypeGroupName: "Contrôle qualité",
taskType:
{
taskTypeId: "DGE-EXPQUAL", taskTypeName: "Contrôle qualité dégats des eaux", defaultDuration: 60, isInProject: false,
dataItems:
{
id: "EXTRAFILLER5", label: "Divers 5"
}
}
}
];
function filterByProperty(array, prop, value){
var filtered = [];
for(var i = 0; i < array.length; i++){
var array1 = array[i];
for(var key in array1){
if(typeof(array1[key] == "object")){
var array2 = array1[key];
for (var key2 in array2){
if(typeof(array2[key2] == "object")){
var array3 = array2[key2];
if(array3[prop] == value){
filtered.push(array3);
}
}
}
}
}
}
return filtered;
var-arr=
[
{
taskTypeGroupId:“EXP.CONT”,taskTypeGroupName:“conclareoire”,
任务类型:
{
taskTypeId:“DGE-EXPCONT”,taskTypeName:“Dégats des eaux conclaure”,默认持续时间:60,isInProject:false,
数据项:
{
id:“额外填充物5”,标签:“潜水员5”
}
}
},
{
takTypeGroupId:“EXPQUAL”,taskTypeGroupName:“Contrôle qualité”,
任务类型:
{
taskTypeId:“DGE-EXPQAL”,taskTypeName:“水资源质量控制”,默认持续时间:60,isInProject:false,
数据项:
{
id:“额外填充物5”,标签:“潜水员5”
}
}
}
];
函数filterByProperty(数组、属性、值){
var筛选=[];
对于(var i=0;i
}
如果您的对象包含3个字段,例如email、firstName、lastName,则使用此字段
ArrayObject
.filter(em => em.email.indexOf(searchEmail) > -1)
.filter(fn => fn.firstName.indexOf(searchFirstName) > -1)
.filter(ln => ln.lastName.indexOf(searchLastName) > -1)
您可能会对我的JSON.search API感兴趣,它比$.grep快5倍,允许您使用正则表达式进行搜索gold@CyrilleConMorales嗯,我今天不会这样做。首先,我会使用
==
,但它与
f = [2,2,3,5,7]
var g = e.filter( function(elem, pos){ return (f.indexOf(elem[1]) == pos) })
var arr =
[
{
taskTypeGroupId: "EXP.CONT", taskTypeGroupName: "Contradictoire",
taskType:
{
taskTypeId: "DGE-EXPCONT", taskTypeName: "Dégats des eaux contradictoire", defaultDuration: 60, isInProject: false,
dataItems:
{
id: "EXTRAFILLER5", label: "Divers 5"
}
}
},
{
takTypeGroupId: "EXPQUAL", taskTypeGroupName: "Contrôle qualité",
taskType:
{
taskTypeId: "DGE-EXPQUAL", taskTypeName: "Contrôle qualité dégats des eaux", defaultDuration: 60, isInProject: false,
dataItems:
{
id: "EXTRAFILLER5", label: "Divers 5"
}
}
}
];
function filterByProperty(array, prop, value){
var filtered = [];
for(var i = 0; i < array.length; i++){
var array1 = array[i];
for(var key in array1){
if(typeof(array1[key] == "object")){
var array2 = array1[key];
for (var key2 in array2){
if(typeof(array2[key2] == "object")){
var array3 = array2[key2];
if(array3[prop] == value){
filtered.push(array3);
}
}
}
}
}
}
return filtered;
ArrayObject
.filter(em => em.email.indexOf(searchEmail) > -1)
.filter(fn => fn.firstName.indexOf(searchFirstName) > -1)
.filter(ln => ln.lastName.indexOf(searchLastName) > -1)