Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将在与管道连接的数组中具有特性值的对象转换为逗号分隔的对象_Javascript_Arrays_Json_Object_Query String - Fatal编程技术网

Javascript 如何将在与管道连接的数组中具有特性值的对象转换为逗号分隔的对象

Javascript 如何将在与管道连接的数组中具有特性值的对象转换为逗号分隔的对象,javascript,arrays,json,object,query-string,Javascript,Arrays,Json,Object,Query String,我有一个值如下的对象 const objectValues = { weight: ["0|5"], species: ["human|alien"], colour: ["Blue-Green|Red|Black|Orange With Green, Red, Yellow And Blue Play Of Colour"], shape: ["Rough"], unique

我有一个值如下的对象

const objectValues = {
    weight: ["0|5"],
    species: ["human|alien"],
    colour: ["Blue-Green|Red|Black|Orange With Green, Red, Yellow And Blue Play Of Colour"],
    shape: ["Rough"],
    uniqueId: "kobe"
}
我想把它变成这样的对象:

const desiredObject = {
    weight: ["0","5"],
    species: ["human","alien"],
    colour: ["Blue-Green","Red","Black","Orange With Green, Red, Yellow And Blue Play Of Colour"],
    shape: ["Rough"],
    uniqueId: "kobe"
}
我想我写的这个函数可以做到:

  let pipeToCommaObject = {};

  const mapSplitted = Object.keys(objectValues).map(key => {
    if(objectValues[key].join().includes('|')){
      pipeToCommaObject[key] = objectValues[key].join().split('|');
    }
  });

然而,它并没有完全做到这一点,请告知我遗漏了什么,以及我需要更改/添加什么以获得我想要的结果。我认为问题可能在于uniqueId本身只是一个字符串,而所有其他属性都在一个数组中。我需要它使字符串保持原样,但对数组值执行操作。

您可以像这样使用for

const objectValues = {
    weight: ["0|5"],
    species: ["human|alien"],
    colour: ["Blue-Green|Red|Black|Orange With Green, Red, Yellow And Blue Play Of Colour"],
    shape: ["Rough"],
    uniqueId: "kobe"
}
const对象={
重量:[“0 | 5”],
物种:[“人类|外来”],
颜色:[
“蓝绿|红|黑|橙配绿、红、黄、蓝三色玩”,
],
形状:[“粗糙”],
唯一标识:“神户”,
};
const newObject={};
for(让输入对象){
常量属性=对象[键];
//检查元素是否为数组
if(Array.isArray(属性)){
//拆分第一个元素
newObject[key]=属性[0]。拆分(“|”);
}否则{
newObject[key]=属性;
}
}

console.log(newObject)如果你有混合数组
物种:[“人类|外星人”、“另一个”、“克林贡|费伦吉”]
,那么公认的答案将不起作用。试试这个(使用
array.concat()

const objectValues={
重量:[“0 | 5”],
物种:[“人类|外星人”、“另一个”、“克林贡|费伦吉”],
颜色:[“蓝绿|红|黑|橙配绿、红、黄、蓝三色”],
形状:[“粗糙”],
独一无二的:“科比”
}
设desiredObject={}
for(让项目进入objectValues){
if(Array.isArray(objectValues[item])){
tmp=[]
objectValues[item].forEach(el=>tmp=tmp.concat(el.split(“|”);
desiredObject[项目]=tmp
}else desiredObject[项目]=对象值[项目]
}

console.log(desiredObject)这是否回答了您的问题?其中一些答案是您所需要的,但映射略有不同function@Drenai不需要,我甚至不需要地图。我可以使用Object.keys(objectValues.forEach)。我不需要返回新数组。我只需要在pipeToCommaObject中填充我想要显示的形状中的对象属性值,非常感谢!正是我要找的!如果
objectValues[item]
的结果不是数组,则该值被设置为
tmp
,这将是undefined@Drenai-thx。更新