Wondering Coder
Wondering Coder

Reputation: 1702

TypeError: Cannot find function find in object

This is frustrating. I thought the problem was the object being returned by the api response. Maybe it's in string so what I did was I copied the response from "postman" and paste it directly on the js. This way im sure that it's in object/array. But the result was the same error.

Why is my code not working on netsuite. The code below is very simple. Tried running it on my local machine and it worked. Does .find not supported in netsuite?

var tasks_data = new Array();
  var tasks_data = [
    {
      'id': 10376401,
      'name': 'closed',
      'notes': null,
      'start_date': '2017-12-23',
      'end_date': '2018-01-07',
      'start_time': null,
      'end_time': null,
      'color': '#f99bd0',
      'color_id': 5,
      'estimated_hours': 0,
      'done': false,
      'user_id': 961775,
      'project_id': null,
      'project': null,
      'folder_id': null,
      'weight': 0,
      'created_at': '2017-11-13T00:58:16.577+00:00',
      'updated_at': '2017-11-13T00:58:16.577+00:00',
      'deleted_at': null
    },
    {
      'id': 10438883,
      'name': '',
      'notes': null,
      'start_date': '2018-02-17',
      'end_date': '2018-02-17',
      'start_time': null,
      'end_time': null,
      'color': '#ccaf53',
      'color_id': 36,
      'estimated_hours': 0,
      'done': false,
      'user_id': 961775,
      'project_id': 1501267,
      'project': {
        'id': 1501267,
        'name': 'sue',
        'color': '#ccaf53',
        'color_id': 36,
        'client': null,
        'created_at': '2017-11-17T03:14:11.459+00:00',
        'updated_at': '2017-11-17T03:14:11.459+00:00'
      },
      'folder_id': null,
      'weight': 0,
      'created_at': '2017-11-17T03:15:48.055+00:00',
      'updated_at': '2017-11-17T03:15:48.055+00:00',
      'deleted_at': null
    },
    {
      'id': 10438875,
      'name': 'Sue',
      'notes': null,
      'start_date': '2018-01-27',
      'end_date': '2018-01-27',
      'start_time': null,
      'end_time': null,
      'color': '#ccaf53',
      'color_id': 36,
      'estimated_hours': 0,
      'done': false,
      'user_id': 961775,
      'project_id': 1501267,
      'project': {
        'id': 1501267,
        'name': 'sue',
        'color': '#ccaf53',
        'color_id': 36,
        'client': null,
        'created_at': '2017-11-17T03:14:11.459+00:00',
        'updated_at': '2017-11-17T03:14:11.459+00:00'
      },
      'folder_id': null,
      'weight': 0,
      'created_at': '2017-11-17T03:14:11.903+00:00',
      'updated_at': '2017-11-17T03:14:50.363+00:00',
      'deleted_at': null
    }
  ];

  // var result = output_result(tasks_data)
  var result = tasks_data.reduce(function (acc, item) {
    var task = acc.find(function (accItem) {
      return accItem.project_id === item.project_id
    })
    if (task && !Array.isArray(task.schedule)) {
      task.schedule = [task.schedule].concat({
        project_id: item.project_id,
        start_date: item.start_date,
        end_date: item.end_date,
        daily_estimate: item.estimated_hours,
      })
      task.start_dates.push(item.start_date)
      task.end_dates.push(item.end_date)
      task.next_start_dates.push(item.start_date)
    } else if (task && Array.isArray(task.schedule)) {
      task.schedule.push({
        project_id: item.project_id,
        start_date: item.start_date,
        end_date: item.end_date,
        daily_estimate: item.estimated_hours,
      })
      task.start_dates.push(item.start_date)
      task.end_dates.push(item.end_date)
      task.next_start_dates.push(item.start_date)
    } else {
      acc.push({
        project_id: item.project_id, //(item.project_id === null) ? 'Missing_project_id' : item.project_id,
        schedule: [{
          project_id: item.project_id, //(item.project_id === null) ? 'Missing_project_id' : item.project_id,
          start_date: item.start_date,
          end_date: item.end_date,
          daily_estimate: item.estimated_hours,
        }],
        start_dates: [item.start_date],
        end_dates: [item.end_date],
        next_start_dates: [item.start_date],
      })
    }

    return acc
  }, [])
  
  console.log(result)
<body>
Hello
</body>

Any help is greatly appreciated.

Upvotes: 0

Views: 9909

Answers (1)

erictgrubaugh
erictgrubaugh

Reputation: 8847

I see you added a polyfill to solve the problem, but the answer to your question is that NetSuite/SuiteScript uses ECMAScript 5.1; its engine is Java Rhino (unsure which version).

find was added in ES6, while reduce was added in ES5.1, so SuiteScript does not support find while it does support reduce.

Sources:

Upvotes: 5

Related Questions