Search code examples
javascriptnode.jsarraysslamdata

Cannot create property 'and_ff' on string 'and_chr 89'"


Having trouble with Lambda function, Receive an error but I don't get same error if i run same code within an express app. I'm not

Data returned by caniuse.getLatestStableBrowsers();
[
  'and_chr 89',        'and_ff 86',
  'and_qq 10.4',       'and_uc 12.12',
  'android 89',        'baidu 7.12',
  'bb 10',             'chrome 89',
  'edge 89',           'firefox 87',
  'ie 11',             'ie_mob 11',
  'ios_saf 14.0-14.5', 'kaios 2.5',
  'op_mini all',       'op_mob 62',
  'opera 73',          'safari 14',
  'samsung 13.0'
]

Lamda Code that i'm having issue with

'use strict';
const caniuse = require('caniuse-api');
const request = require('request');

const browsers = caniuse.getLatestStableBrowsers();
const versions = browsers.reduce((memo, bro) => {
    const parts = bro.split(' ');
    memo[parts[0]] = parts[1];
    return memo;
    });
    console.log(versions);

Express Code that works just fine

'use strict'
const express = require('express');
const caniuse = require('caniuse-api');
const app = express();

app.use(express.json());

app.get('/', (req, res) => {
  const browsers = caniuse.getLatestStableBrowsers();
  const versions = browsers.reduce((memo, bro) => {
    const parts = bro.split(' ');

    memo[parts[0]] = parts[1];

    return memo;
  }, {});

  res.send({ versions });
});



Solution

  • The initial value is missing for the array reducer method, whereas in express code initial value is defined.

    'use strict';
    const caniuse = require('caniuse-api');
    const request = require('request');
    
    const browsers = caniuse.getLatestStableBrowsers();
    const versions = browsers.reduce((memo, bro) => {
        const [browser, version] = bro.split(' ');
        memo[browser] = version;
        return memo;
    }, {});
    console.log(versions);