JS - Object.keys()中的三元语句

时间:2017-10-12 13:36:44

标签: javascript reactjs ecmascript-6

当我在Object.keys()中放置ternary statementif statement时,如下所示:

 Object.keys(date).forEach((index) => {
        dates[date[index].id] !== undefined ?
          dates[date[index].id] =
          [...dates[dates[date[index].id], dates[date[index].name]
          : null;
      });

我从Linter得到了这个错误:

Expected an assignment or function call and instead saw an expression. (no-unused-expressions)

当我使用常规if语句时,我收到此错误,

Parsing error: Unexpected token (Fatal)

为什么?

3 个答案:

答案 0 :(得分:4)

您已复制dates并在作业中删除了一些括号:

dates[date[index].id] = [...dates[dates[date[index].id], dates[date[index].name]

应该是:

dates[date[index].id] = [..dates[date[index].id], dates[date[index].name]]

演示:

Object.keys(date).forEach((index) => dates[date[index].id] !== undefined ?
        dates[date[index].id] = [...dates[date[index].id], dates[date[index].name]] : null);

答案 1 :(得分:2)

你可以使用常规的if条件,没有三元表达式,而linter不喜欢它。

Object.keys(date).forEach((index) => {
    if (dates[date[index].id] !== undefined) {
        dates[date[index].id] = [
            ...dates[dates[date[index].id]],
            dates[date[index].name]
        ];
    }
});

基本上,tenary与运算符之外的赋值一起使用,如

x = a > 4 ? 7: 8;

而你的任务是在经营者内部进行的。

答案 2 :(得分:2)

你只有一些语法错误,可能源于过度复杂的属性访问嵌套。保持简单:

for (const index in date) {
    const id = date[index].id;
    if (dates[id] !== undefined) {
        dates[id].push(date[index].name);
        // or if you insist:
        // dates[id] = [...dates[id], date[index].name];
    }
}