如何将键:"value" 转换为键:["value"] in Javascript?

How to convert key: "value" to key:["value"] in Javascript?

我有一个对象列表,我在其中得到一个看起来像这样的键值对:

Object {
  key1 : "value1",
  key2 : ["value2", "value3", "value4"], 
  key3 : ["value5", "value6"],
  key4 : "value7",
  .
  .
} 

我正在循环打印这些值,如下所示:

Object.key1[i], Object.key2[i], Object.key3[i]...

如您所见,key1[i] 将打印“v”,因为它不是数组。
如何转换这些字符串值并覆盖同一个对象?
这就是我希望对象在覆盖后的样子:

Object {
  key1 : ["value1"],
  key2 : ["value2", "value3", "value4"], 
  key3 : ["value5", "value6"],
  key4 : ["value7"],
  .
  .
} 

遍历对象条目。如果该值不是数组,请将其替换为包含该值的单元素数组。

Object.entries.forEach(([key, value]) => {
    if (!Array.isArray(value)) {
        Object[key] = [value];
    }
});

迭代您的对象,如果不是数组,则将其设为数组

const obj = {
  key1 : "value1",
  key2 : ["value2", "value3", "value4"], 
  key3 : ["value5", "value6"],
  key4 : "value7",
  .
  .
} 

Object.keys(obj).forEach(key => {
  const value = obj[key]
  if(!Array.isArray(v) {
    obj[key] = [v]
  }
}

您需要做的是使用typeof检查该值是否为字符串。

if (typeof obj.key1 === 'string') // do something with it....

因为现在发生的事情是你在一个字符串上做 obj.key1[i],你得到的不是数组中的条目 i,而是你得到的字符 i 来自字符串。

但是您的代码还有其他问题,例如 Object 是一个保留字,并且您没有等号来将您的值分配给对象。

只需映射对象并创建它的浅表副本(例如通过 reduce)

const valuesToArray = (object) => Object.entries(object).reduce(
  (result, [key, value]) => ({
    [key]: Array.isArray(value) ? value : [value],
     ...result,
   }),
   {},
)

const test = { a: 'a', b: ['b', 'b'], c: 'ccccc' }
console.log(valuesToArray(test))