Javascript 按键和值筛选数组

Javascript 按键和值筛选数组,javascript,Javascript,我有以下数组对象,希望使用键和值进行筛选 var arrayObj = [{name:'ram',lastname:'jha',address:{fistLine:'100 ft raod',street:'kfc'},mobileNumber:12345745}, {name:'rakesh',lastname:'jha',address:{fistLine:'200 ft raod',street:'pizza hut'},mobileNumber:123457

我有以下数组对象,希望使用键和值进行筛选

var arrayObj = [{name:'ram',lastname:'jha',address:{fistLine:'100 ft raod',street:'kfc'},mobileNumber:12345745},
               {name:'rakesh',lastname:'jha',address:{fistLine:'200 ft raod',street:'pizza hut'},mobileNumber:12345746},
               {name:'pankaj',lastname:'jha',address:{fistLine:'300 ft raod',street:'abc line'},mobileNumber:12345747}];
我希望输出如下所示:

let newarrayObj:[['name','lastname', 'address.fistLine','address.street','mobileNumber'],
                 ['ram','jha','100 ft raod','kfc','12345745'],
                 ['rakesh','jha','200 ft raod','pizza hut','12345746'],
                 ['pankaj','jha','300 ft raod','abc line','12345747']]

下面的解决方案可工作到两个级别。如果是更深层次的,则必须使用递归方法。当前的soution检查该值是否是用于创建内部循环的对象,然后将该对象缩减为所需的格式

var arrayObj=[{name:'ram',lastname:'jha',地址:{fistLine:'100 ft raod',street:'kfc'},手机号码:12345745},
{姓名:'rakesh',姓氏:'jha',地址:{前线:'200英尺,街道:'pizza hut'},手机号码:12345746},
{姓名:'pankaj',姓氏:'jha',地址:{第一条线:'300英尺,街道:'abc线'},手机号码:12345747}];
让newArrayObj=arrayObj.reduce((acc,obj,i)=>{
如果(!acc[0])acc[0]=[];
acc[i+1]=[];
Object.entries(obj.forEach)([key,value])=>{
if(value&&typeof value!=“object”&&&acc[0]。包括(键)){
acc[0]。按(键);
acc[i+1]。推送(值);
}else if(value&&typeof value==='object'){
Object.entries(value).forEach([k,v])=>{
设val=key+'.'+k;
如果(!acc[0]。包括(val))acc[0]。推送(val);
acc[i+1]。推送(v);
});
}
});
返回acc;
},[]) 
console.log(newArrayObj)可以与和一起使用

var arrayObj=[{name:'ram',lastname:'jha',地址:{firstLine:'100 ft raod',street:'kfc'},mobileNumber:12345745},{name:'rakesh',lastname:'jha',地址:{fistLine:'200 ft raod',street:'pizza hut',mobileNumber:'12345746},{name:'pankaj',lastname:'jha',地址:{fistLine:'300 ft raod',street:'abc line'},mobileNumber:12345747}];
var keys=Object.entries(arrayObj[0]).map([key,value])=>{
如果(值的类型==='object'){
返回Object.keys(value.map)(子键=>key+'..+subKey);
}否则{
返回键;
}
}).flat();
var values=arrayObj.map(项=>
Object.values(item.map)(值=>
值的类型==='object'?对象。值(值):值
).flat()
);
var result=[keys].concat(值);

控制台日志(结果)假设
arrayObj
至少有一项,则无论对象有多深,都可以执行以下操作:

const flatKeys=object=>object.entries(object).reduce((键,[key,value])=>{
if(typeof value=='object'){/&&value!==null(如果需要)
flatKeys(值).forEach(子键=>keys.push(键+'。+子键))
}否则{
按键。按(键)
}
返回键
}, [])
const flatValues=object=>object.values(object).reduce((值,值)=>{
if(typeof value=='object'){/&&value!==null(如果需要)
flatValues(value).forEach(subValue=>values.push(subValue))
}否则{
值。推送(值)
}
返回值
}, [])
常数arrayObj=[
{姓名:'ram',姓氏:'jha',地址:{fistLine:'100 ft raod',街道:'kfc'},手机号码:12345745},
{姓名:'rakesh',姓氏:'jha',地址:{第一行:'200英尺,街道:'pizza hut',手机号码:12345746},
{姓名:'pankaj',姓氏:'jha',地址:{前线:'300英尺,街道:'abc线'},手机号码:12345747}
]
const newarrayObj=[flatKeys(arrayObj[0]),…arrayObj.map(flatValues)]

log(newarrayObj)
这不是过滤。这称为映射。