Javascript 谁能给我解释一下这行突出显示的代码吗? var根=[],子={}; //查找顶级节点并基于父节点散列子节点 对于(变量i=0,len=arry.length;itarget=root 否则 如果children[p]不为空,则target=children[p] Else子[p]=[]然后目标=子[p]这是一个空数组 相等的
我的理解是,如果p为null,那么该父级的childrens应该为空,但是为什么需要使用此代码中使用的| |表达式呢Javascript 谁能给我解释一下这行突出显示的代码吗? var根=[],子={}; //查找顶级节点并基于父节点散列子节点 对于(变量i=0,len=arry.length;itarget=root 否则 如果children[p]不为空,则target=children[p] Else子[p]=[]然后目标=子[p]这是一个空数组 相等的,javascript,Javascript,我的理解是,如果p为null,那么该父级的childrens应该为空,但是为什么需要使用此代码中使用的| |表达式呢 (children[p]|(children[p]=[])如果未定义children[p](或此值为false、未定义、null、0…),则使用新数组进行设置 逻辑OR运算符(| |)返回其第二个操作数的值,如果第一个操作数为falsy,则返回第一个操作数的值 e、 一, 这是一个带有反向检查的p,它是父项 如果p不存在,则采用根,否则采用父级的子级或为其分配一个空数组作为默认值
(children[p]|(children[p]=[])如果未定义
children[p]
(或此值为false、未定义、null、0…),则使用新数组进行设置
逻辑OR运算符(| |)返回其第二个操作数的值,如果第一个操作数为falsy,则返回第一个操作数的值
e、 一,
这是一个带有反向检查的p
,它是父项
如果p
不存在,则采用根
,否则采用父级的子级或为其分配一个空数组作为默认值,然后采用它
"foo" || "bar"; // returns "foo"
false || "bar"; // returns "bar"
|是逻辑或运算符或条件运算符。它返回第一个或第二个操作数,具体取决于第一个操作数是truthy还是false。truthy值表示除0、未定义的、null之外的任何值,“”或假
这个
root:(children[p]|(children[p]=[])
意味着如果children[p]
是truthy那么root是children[p]
否则root将是children[p]=[
children[p]
将被分配一个空数组,而不是一个假值这是一种更简洁的描述
target = !p // condition
? roots // true part
: (children[p] || (children[p] = [])); // else part
一步一步地
表示target=!p?x:y
则如果不是p
。否则target=x
target=y
表示将空数组分配给(children[p]=[])
children[p]
表示如果(children[p]|(children[p]=[])
不为空,则返回该值。否则,为children[p]
分配一个空数组,然后返回它children[p]
- 如果
=>p为空或未定义
target=root
- 否则
- 如果
,则children[p]不为空
target=children[p]
- Else
然后子[p]=[]
这是一个空数组目标=子[p]
- 如果
有一个三元运算符来检查
p
是否不是父项,然后将目标设置为子项,将p元素数组设置为新的空数组
target = !p // condition
? roots // true part
: (children[p] || (children[p] = [])); // else part
if (!children[p]) {
children[p] = [];
}
if (!p) {
target = roots;
} else if (children[p]) {
target = children[p];
} else {
children[p] = [];
target = children[p];
}