将字符串数组作为键值对

时间:2019-08-28 08:29:06

标签: javascript arrays

我正在获取这样的原始数据

SECRET_TOKEN=Iwillruletheworld;SECRET_REFRESH_TOKEN=Iwillruletheworld;SERVER_PORT=3000;SERVER_WS_PORT=4000;NODE_URI=http://test.abc.com/#/;MONGODB_DEFAULT_URI=mongodb;MONGODB_HOST=localhost;MONGODB_PORT=27017;

我希望将此作为键值对。所以,首先我像这样用;分隔数据

data.split(';');

输出

[ 'SECRET_TOKEN=Iwillruletheworld',
  'SECRET_REFRESH_TOKEN=Iwillruletheworld',
  'SERVER_PORT=3000',
  'SERVER_WS_PORT=4000',
  'NODE_URI=http://test.abc.com/#/',
  'MONGODB_DEFAULT_URI=mongodb',
  'MONGODB_HOST=localhost',
  'MONGODB_PORT=27017'
]

现在我要将其设置为键值对

预期产量

[ 'SECRET_TOKEN'='Iwillruletheworld',
  'SECRET_REFRESH_TOKEN'='Iwillruletheworld',
  'SERVER_PORT'='3000',
  'SERVER_WS_PORT'='4000',
  'NODE_URI'='http://test.abc.com/#/',
  'MONGODB_DEFAULT_URI'='mongodb',
  'MONGODB_HOST'='localhost',
  'MONGODB_PORT'='27017'
]

我想在发生'的任何地方插入=。谁能帮帮我。

5 个答案:

答案 0 :(得分:4)

假设您想要作为结果的对象(因为您提供的输出实际上是无效的),则可以除以;,删除空项目(.filter(Boolean))和reduce建立键/值对对象。

当然,此示例假定输入中没有重复的键。

let input = `SECRET_TOKEN=Iwillruletheworld;SECRET_REFRESH_TOKEN=Iwillruletheworld;SERVER_PORT=3000;SERVER_WS_PORT=4000;NODE_URI=http://test.abc.com/#/;MONGODB_DEFAULT_URI=mongodb;MONGODB_HOST=localhost;MONGODB_PORT=27017;`;

let res = input.split(';').filter(Boolean).reduce((acc, next) => {
  let [key, value] = next.split('=');
  acc[key] = value;
  return acc;
}, {});

console.log(res);

答案 1 :(得分:2)

您可以将其转换为JavaScript对象(而不是数组):

var arr = [ 'SECRET_TOKEN=Iwillruletheworld',
  'SECRET_REFRESH_TOKEN=Iwillruletheworld',
  'SERVER_PORT=3000',
  'SERVER_WS_PORT=4000',
  'NODE_URI=http://test.abc.com/#/',
  'MONGODB_DEFAULT_URI=mongodb',
  'MONGODB_HOST=localhost',
  'MONGODB_PORT=27017'
];

var obj = {};

arr.forEach((x) => {
  var kv = x.split('=');
  obj[kv[0]] = kv[1];
});

console.log(obj);

答案 2 :(得分:1)

您可以使用;进行拆分,然后使用=进行拆分,并使用Array.prototype.map返回对象数组,然后使用Object.assign将其转换为object

let str = 'SECRET_TOKEN=Iwillruletheworld;SECRET_REFRESH_TOKEN=Iwillruletheworld;SERVER_PORT=3000;SERVER_WS_PORT=4000;NODE_URI=http://test.abc.com/#/;MONGODB_DEFAULT_URI=mongodb;MONGODB_HOST=localhost;MONGODB_PORT=27017';
let out = Object.assign(str.split(';').map(e => ({[e.split('=')[0]]:e.split('=')[1]})));
console.log(out)

答案 3 :(得分:1)

尝试使用此字符串数组:

const str = 'SECRET_TOKEN=Iwillruletheworld;SECRET_REFRESH_TOKEN=Iwillruletheworld;SERVER_PORT=3000;SERVER_WS_PORT=4000;NODE_URI=http://test.abc.com/#/;MONGODB_DEFAULT_URI=mongodb;MONGODB_HOST=localhost;MONGODB_PORT=27017;'
const strArray = str.split(';');
const corrArray = strArray.map(s=> s.replace('=', "'='")).map(s=> `'${s}'`);
console.log(corrArray);

如果需要对象:

const str = 'SECRET_TOKEN=Iwillruletheworld;SECRET_REFRESH_TOKEN=Iwillruletheworld;SERVER_PORT=3000;SERVER_WS_PORT=4000;NODE_URI=http://test.abc.com/#/;MONGODB_DEFAULT_URI=mongodb;MONGODB_HOST=localhost;MONGODB_PORT=27017;'
const objs = str.split(';').map(a=> {
    const divided = a.split('=');
    const obj = {};
    obj[divided[0]] = divided[1];
    return obj;
})

答案 4 :(得分:1)

let data = 'SECRET_TOKEN=Iwillruletheworld;SECRET_REFRESH_TOKEN=Iwillruletheworld;SERVER_PORT=3000;SERVER_WS_PORT=4000;NODE_URI=http://test.abc.com/#/;MONGODB_DEFAULT_URI=mongodb;MONGODB_HOST=localhost;MONGODB_PORT=27017';
//assuming the data you receive is a string

let arr = data.split(';');
let dataObj = {};
for (let piece of arr){
   let pieceToKeyVal = piece.split('=');
   dataObj[pieceToKeyVal[0]] = pieceToKeyVal[1];
}
console.log(dataObj);