2017-12-21 29 views
0

これはイライラしています。問題は、APIの応答によって返されるオブジェクトだと思った。たぶんそれは文字列なので、私は "郵便配達員"からの応答をコピーしてjsに直接貼り付けました。このようにして、オブジェクト/配列内にあることを確認します。しかし結果は同じエラーでした。TypeError:オブジェクト内の関数findを見つけることができません

なぜコードがnetsuiteで動作しないのですか?以下のコードは非常に簡単です。私のローカルマシンでそれを実行しようとしたと働いた。 .findは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>

任意の助けを大幅に高く評価されています。

+0

これは動作するはずですが。 'find'がサポートされなかった場合、' reduce'は 'find'の前にエラーを引き起こすはずです。そして、私が知る限り、 'find'は配列上で常に使用されます。 – Xufox

+2

どのようなnetsuiteが動作しているのかわかりませんが、使用しているエンジンがサポートしていない可能性があります。 polyfillを追加する可能性があります。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find – epascarello

+0

以前はポリフィルを行っていません。 –

答えて

3

問題を解決するためにpolyfillを追加しましたが、NetSuite/SuiteScriptはECMAScript 5.1を使用しています。そのエンジンはJava Rhino(どちらのバージョンが不明)です。

findがES6で追加され、reduceがES5.1で追加されたため、をサポートしていません。reduceをサポートしています。

出典:

関連する問題