Javascript 数据映射中是否有if语句?

Javascript 数据映射中是否有if语句?,javascript,json,Javascript,Json,这是我的密码: let datasets = data.map( item => ({ "label": item.name, "data": item.prices.map(nested => ({ if( /* Last row */ ){ "x": new Date(nested.updatedAt), "y": Number(nested.price) } else {

这是我的密码:

  let datasets = data.map(
    item => ({
      "label": item.name,
      "data": item.prices.map(nested => ({
        if( /* Last row */ ){
          "x": new Date(nested.updatedAt),
          "y": Number(nested.price)
        } else {
          "x": new Date(nested.createdAt),
          "y": Number(nested.price)
        }
      }))
    })
  );

我似乎根本无法在数据映射中添加if语句,上面是我的目标示例。我试着做一个
console.log
测试,它似乎不允许数据映射中包含代码。虽然我发现它也在做类似的事情。有什么建议吗?

传递给.map的参数有
计数
数组

所以你可以

item.prices.map((nested,count,array) => {
    if ( count ==  arr.length - 1 ) { /* last one */ 
        // do something for last one
    } else {
        // not last one
    } 
});

传递给.map的参数有
计数
数组

所以你可以

item.prices.map((nested,count,array) => {
    if ( count ==  arr.length - 1 ) { /* last one */ 
        // do something for last one
    } else {
        // not last one
    } 
});

您可以使用带有
new Date()
构造函数的条件运算符传递
nested.updatedAt
nested.createdAt

  let datasets = data.map(
    item => ({
      "label": item.name,
      "data": item.prices.map(nested => 
                ({
                  "x": new Date(lastrow ? nested.updatedAt : nested.createdAt),
                  "y": Number(nested.price)
                }) 
              )
    })
  );

您可以使用带有
new Date()
构造函数的条件运算符传递
nested.updatedAt
nested.createdAt

  let datasets = data.map(
    item => ({
      "label": item.name,
      "data": item.prices.map(nested => 
                ({
                  "x": new Date(lastrow ? nested.updatedAt : nested.createdAt),
                  "y": Number(nested.price)
                }) 
              )
    })
  );

映射需要
return
语句。所以这样做是完全正确的:

let datasets = data.map((item) => {
    var obj = {};
    obj.label = item.name
    obj.data = item.prices.map((subItem, key) => {
        if (item.prices.length === key + 1) {
            return {x: new Date(subItem.updateAt), y: Number(subItem.price)};
        }

        return {x: new Date(subItem.createdAt), y: Number(subItem.price)}
    })

    return obj;
})

return语句结束映射中的当前迭代。

映射需要
return
语句。所以这样做是完全正确的:

let datasets = data.map((item) => {
    var obj = {};
    obj.label = item.name
    obj.data = item.prices.map((subItem, key) => {
        if (item.prices.length === key + 1) {
            return {x: new Date(subItem.updateAt), y: Number(subItem.price)};
        }

        return {x: new Date(subItem.createdAt), y: Number(subItem.price)}
    })

    return obj;
})

return语句结束了映射中的当前迭代。

似乎我根本无法在映射中使用if语句,例如,对于该示例,我得到了
意外标记==
。不知道为什么您的环境支持ES6?,请尝试
item.prices.map(函数(嵌套){if(){}})
。其他的回答是正确的,因为你需要返回对象。即
return{thing:true}
似乎我根本无法在映射内使用if语句,例如,对于该示例,我得到了
Unexpected token==
。不知道为什么您的环境支持ES6?,请尝试
item.prices.map(函数(嵌套){if(){}})
。其他的回答是正确的,因为你需要返回对象。即<代码>返回{thing:true}什么是“最后一行”?很抱歉没有澄清,最后一行占位符文本表示我要使用
nested.updatedAt
而不是
nested.createdAt
。由于它不像for循环,我正在努力获取该值以进行内部检查,因此我现在正在阅读所有响应。更改
nested.updatedAt
nested.createdAt
的选项只有一个。您可以使用条件运算符传递
new Date()
constructor中的任意一个值“最后一行”是什么?很抱歉,这里的最后一行占位符文本表示我要使用
nested.updatedAt
和not
nested.createdAt
。由于它不像for循环,我正在努力获取该值以进行内部检查,因此我现在正在阅读所有响应。更改
nested.updatedAt
nested.createdAt
的选项只有一个。您可以使用条件运算符传递
new Date()
constructor中的任意一个值。这很完美,您知道在这种情况下我是否也可以同时返回两个对象吗?我一直想这么做,但我坚持加倍nesting@MilesCollier可以嵌套多少个贴图,但每个贴图只能返回一个对象。如果您想并行执行两个映射,可以查看async.js parallel(),这很完美,您知道在这个场景中我是否也可以同时返回两个对象吗?我一直想这么做,但我坚持加倍nesting@MilesCollier可以嵌套多少个贴图,但每个贴图只能返回一个对象。如果要并行执行两个映射,可以查看async.js parallel()