如何将字符串转换为数组选择器的点表示法

时间:2019-06-30 18:02:43

标签: javascript jquery

我正在尝试优化一个函数,该函数将根据用户偏好对多维数组进行排序。 (ID,名称,时间戳等)。 我不想创建许多不同的功能,而是希望将它们全部组合为一个。例如,参见下面的代码。我希望能够将名称或timeCreated字符串传递给它,而不是执行2个不同的函数,但我不知道如何将字符串转换为点表示法。

compareName (a, b) {
    if (a.name < b.name) {
        return -1;
    }
    if (a.name > b.name) {
        return 1;
    }
    return 0;
},
compareCreated (a, b) {
    if (a.timeCreated < b.timeCreated) {
        return -1;
    }
    if (a.timeCreated > b.timeCreated) {
        return 1;
    }
    return 0;
}

因为某些值可能为null,所以我发现此函数比上面的代码处理得更好...我只需要找出一种将数组选择器传递给a和b的方法即可。

alphabetically(ascending) {
  return function (a, b) {
    // equal items sort equally
    if (a === b) {
        return 0;
    }
    // nulls sort after anything else
    else if (a === null) {
        return 1;
    }
    else if (b === null) {
        return -1;
    }
    // otherwise, if we're ascending, lowest sorts first
    else if (ascending) {
        return a < b ? -1 : 1;
    }
    // if descending, highest sorts first
    else { 
        return a < b ? 1 : -1;
    }
  };
}

1 个答案:

答案 0 :(得分:1)

您可以使用[] notation并在函数中接受一个额外的参数

alphabetically(ascending) {
  return function (a, b, prop) {
    // equal items sort equally
    if (a[prop] === b[prop]) {
        return 0;
    }
    // nulls sort after anything else
    else if (a[prop] === null) {
        return 1;
    }
    else if (b[prop] === null) {
        return -1;
    }
    // otherwise, if we're ascending, lowest sorts first
    else if (ascending) {
        return a[prop] < b[prop] ? -1 : 1;
    }
    // if descending, highest sorts first
    else { 
        return a[prop] < b[prop] ? 1 : -1;
    }
  };
}