按对象键值搜索多级javascript数组
我有这个obj按对象键值搜索多级javascript数组,javascript,Javascript,我有这个obj var myObj = { "sections": [{ "id": "s1", "name": "my section no.1", "sheets": [{ "id": "sheet1", "questions": [{ "id": "q1", "name": "my q",
var myObj = {
"sections": [{
"id": "s1",
"name": "my section no.1",
"sheets": [{
"id": "sheet1",
"questions": [{
"id": "q1",
"name": "my q",
"options": [{
"id": "o1",
"order_no": 1,
"name": "option 1"
}, {
"id": "o2",
"name": "option 2"
}]
}]
}]
}]
};
我希望函数按id搜索此数组
所以
searchById(“o1”)应返回
{"id": "o1","order_no": 1,"name": "option 1"}
和searchById(“q1”)应返回
{
"id": "q1",
"name": "my q",
"options": [{
"id": "o1",
"order_no": 1,
"name": "option 1"
}, {
"id": "o2",
"name": "option 2"
}]
}
请帮助我您拥有的是对象,您可以在循环中使用for…创建递归函数以返回结果
var obj={
“章节”:[{
“id”:“s1”,
“名称”:“我的第一节”,
“工作表”:[{
“id”:“sheet1”,
“问题”:[{
“id”:“q1”,
“姓名”:“我的q”,
“选择”:[{
“id”:“o1”,
“订单号”:1,
“名称”:“选项1”
}, {
“id”:“o2”,
“名称”:“选项2”
}]
}]
}]
}]
}
函数findObj(数据,id){
用于(数据中的var i){
如果(i='id'&&data[i]==id)返回数据
if(数据类型[i]=“对象”&&findObj(数据[i],id))返回findObj(数据[i],id)
}
}
log(findObj(obj,'o1'))
log(findObj(obj,'q1'))
您拥有的是对象,您可以在循环中为…创建递归函数以返回结果
var obj={
“章节”:[{
“id”:“s1”,
“名称”:“我的第一节”,
“工作表”:[{
“id”:“sheet1”,
“问题”:[{
“id”:“q1”,
“姓名”:“我的q”,
“选择”:[{
“id”:“o1”,
“订单号”:1,
“名称”:“选项1”
}, {
“id”:“o2”,
“名称”:“选项2”
}]
}]
}]
}]
}
函数findObj(数据,id){
用于(数据中的var i){
如果(i='id'&&data[i]==id)返回数据
if(数据类型[i]=“对象”&&findObj(数据[i],id))返回findObj(数据[i],id)
}
}
log(findObj(obj,'o1'))
console.log(findObj(obj,'q1'))
函数findID(id,object){
让_temp;
//验证是否为阵列
if(数组的对象实例){
//通过递归扫描所有对象
for(设i=0;i
函数findID(id,对象){
让_temp;
//验证是否为阵列
if(数组的对象实例){
//通过递归扫描所有对象
for(设i=0;i
你能解释一下吗?你能解释一下吗?你的函数没有迭代所有的键,所以我发布了新的答案find it out no我在第二个if子句中添加了一个条件if(typeof data[i]=“object”&&findObj(data[i],id))
这是干什么的?另外,您能否提供我的代码失败的数据示例,以便我可以修复它?该函数将在Objects之后跳过任何键。您的函数没有迭代所有键,因此我发布了新答案find it Out No我在第二个if子句中添加了一个条件if(数据类型[i]='object'&&findObj(数据[i],id))
这是做什么的?另外,您能否提供我的代码失败的数据示例,以便我可以修复它?该函数将跳过对象之后的任何键
myArray = {
"sections": [{
"id": "s1",
"name": "my section no.1",
"sheets": [{
"id": "sheet1",
"questions": [{
"id": "q1",
"name": "my q",
"options": [{
"id": "o1",
"order_no": 1,
"name": "option 1"
}, {
"id": "o2",
"name": "option 2"
}]
}]
}]
}]
}
myArray = JSON.parse(myArray).sections;
function getMeObjById(criteria) {
var myObj = myArray.filter(funcion(obj){
if(obj.id !== 'undefined' && obj.id === criteria){
return true;
}
});
return myObj; // or return myObj[0] if id are unique
}
function findID(id, object){
let _temp;
// Verify if is Array
if(object instanceof Array){
// Scan all objects by doing recursion
for(let i = 0; i < object.length; i++){
if((_temp = findID(id, object[i]))){
return _temp;
}
}
}
// Verify if is Object
if(object instanceof Object){
// Verify if is the Object ID
if(object.id && object.id === id){
return object;
}
// Scan all objects by doing recursion
for(index in object){
if(object[index] instanceof Object || object[index] instanceof Array){
if((_temp = findID(id, object[index]))){
return _temp;
}
}
}
}
}