三元条件中的意外标记中断

2023-12-02

下面的函数旨在以数组形式从(可能嵌套的)对象返回值 - 列表参数可以是任何对象。如果我将break语句移到for循环之后,我不会收到任何错误,但当然我的函数不会按需要运行。我使用break的方式有什么问题吗?

function listToArray(list) {
    var objectArray = [];
    function objectPeeler() {
        let peel = Object.getOwnPropertyNames(list);
        for(var i = 0; i < peel.length; i++) {
            list[peel[i]] && typeof list[peel[i]] != 'object' ? 
                objectArray.push(list[peel[i]]): 
                list[peel[i]] ? 
                    (list = list[peel[i]], objectPeeler()) :
                    break;
        }
    return objectArray;
    }
    objectPeeler();
}

如果其他人遇到此问题:三元运算符仅适用于值表达式,而不适用于语句(如break),并且不适合在这些情况下使用。

这有效:

function listToArray(list) {
    var objectArray = [];
    function objectPeeler() {
        let peel = Object.getOwnPropertyNames(list);
        for(var i = 0; i < peel.length; i++) {
            list[peel[i]] != null && typeof list[peel[i]] != 'object' ? 
                objectArray.push(list[peel[i]]): 
                list[peel[i]] ? 
                    (list = list[peel[i]], objectPeeler()): null;
        }
    }
    objectPeeler();
    return objectArray;
}

但使用 jquery .next 方法可以提供更好的解决方案:

function listToArray(list) {
  var array = [];
  for (var obj = list; obj; obj = obj.next)
    array.push(obj.value);
  return array;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

三元条件中的意外标记中断 的相关文章

随机推荐