使用子属性过滤所有父对象

Posted

技术标签:

【中文标题】使用子属性过滤所有父对象【英文标题】:using child property to filter all parent objects 【发布时间】:2018-10-11 17:25:08 【问题描述】:

我正在尝试更深入地研究 javascript 和 遇到了一个独特的场景,其中数据以一种方式呈现,但显示依赖于指示父级组织的子属性。 (* 有这个词吗?)

如何呈现这些数据以便按“表格”排列。而且也许它不是关于反转数据,而是创建某种关系。

结果应该是一个克隆。不改变原始数据。

纯 JavaScript 或 _.lodash。

一个好的答案会建议处理数据的方法,以便它可以通过 forms.name 呈现。

一个极好的答案将演示如何(显示代码)使用 forms.name 操作数据。

鉴于此方法中呈现的原始数据。

parent : 
    childOne: 
        canHide : true,
        canStop : false,
        forms : [
            name: 'pathway 1', enabled: true,
            name: 'pathway 2', enabled: false,
            name: 'pathway 3', enabled: false
        ]
    ,
    childTwo: 
        canHide : true,
        canStop : false,
        forms : [
            name: 'pathway 1', enabled: true,
            name: 'pathway 2', enabled: false,
            name: 'pathway 5', enabled: false,
            name: 'pathway 7', enabled: false
        ]
    
,

我想弄清楚的是,我将如何呈现数据更像这样?

注意:child.forms.name 可能包含空格。

newParent : 
    pathway 1 : 
        childOne:  enabled : true ,
        childTwo:  enabled : false 
    ,
    pathway 2 : 
        childOne:  enabled : false ,
        childTwo:  enabled : false 
    ,
    pathway 3 : 
        childOne:  enabled : true ,
    ,
    pathway 5 : 
        childTwo:  enabled : false 
    ,
    pathway 7 : 
        childTwo:  enabled : false 
    
,

我不完全确定数据的结构应该是这样的。

我正在努力学习更多 JavaScript。

我认为显示器的外观是这样的

Pathway 1
    childOne .     [checkbox] => enabled : true|false
    childTwo .     [checkbox] => enabled : true|false  
...  
Pathway 7
    childTwo .     [checkbox] => enabled : true|false

到目前为止我已经尝试过:

我根据“父”对象中 forms.name 的长度做了一个 for 循环。 将每个 forms.name 推入一个新数组。 使用 lodash uniq 只返回唯一的(去重数组)

从那里我在想必须有一种方法可以再次循环通过父级,创建一个新数组,其中每个子级(childOne、childTwo 等)都添加到唯一列表中的每个 form.name 下。

但是我仍然需要返回“启用”属性。

UGGGG一定有更好的办法吗? 我读了一些关于关系数据库的东西。 有没有这样的代码我不必重新发明***?

【问题讨论】:

你应该分享你已经尝试过的代码! :) 【参考方案1】:

我玩过你的代码,结果是这样的:

var parent = 
    childOne: 
        canHide : true,
        canStop : false,
        forms : [
            name: 'pathway 1', enabled: true,
            name: 'pathway 2', enabled: false,
            name: 'pathway 3', enabled: false
        ]
    ,
    childTwo: 
        canHide : true,
        canStop : false,
        forms : [
            name: 'pathway 1', enabled: true,
            name: 'pathway 2', enabled: false,
            name: 'pathway 5', enabled: false,
            name: 'pathway 7', enabled: false
        ]
    
;
var newParent = ;

// Here comes the funk(tion)!
Object.keys(parent).map(function(child, index1) 
  var forms = parent[child]['forms'];
  Object.keys(forms).map(function(pathway, index2) 
    var pw_name = forms[pathway]["name"];
    newParent[pw_name] = newParent[pw_name] || ;
    newParent[pw_name][child] =  "enabled": forms[pathway]["enabled"] ;
  );
);

// Output
console.log(newParent);

如果您希望我添加一些内容,请随时发表评论。

无论如何,我希望它有所帮助!

【讨论】:

以上是关于使用子属性过滤所有父对象的主要内容,如果未能解决你的问题,请参考以下文章

jquery选择器

如何在python django中获取所有父节点但过滤子节点

根据子对象属性过滤 ng-repeat 列表

一个可以递归遍历对象图的 NSPredicate?

Mybatis自动生成的BO对象继承公共父类(BO中过滤掉公共属性)

基于对象属性的子数组过滤数组