Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.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_Jquery_Arrays - Fatal编程技术网

Javascript 无法通过拆分数组中的字符串来创建新对象

Javascript 无法通过拆分数组中的字符串来创建新对象,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有一个字符串数组,需要在“-”处拆分,并使用拆分值创建一个新对象。字符串可以有多个“-”,但我希望总是在最后一个“-”处拆分 该数组如下所示: [ 'This is movie number 1. – Robert Downey Jr', 'This is movie number 2. – Ben Afleck', 'This is movie number 3. – Chris Evans', 'This is movie number 4. – Robin William

我有一个字符串数组,需要在“-”处拆分,并使用拆分值创建一个新对象。字符串可以有多个“-”,但我希望总是在最后一个“-”处拆分

该数组如下所示:

[
  'This is movie number 1. – Robert Downey Jr',
  'This is movie number 2. – Ben Afleck',
  'This is movie number 3. – Chris Evans',
  'This is movie number 4. – Robin Williams',
  'This - is movie - number 5. – Al Pacino',
  'This is movie number 6. – Dwayne Johnson',
  'This is - movie number 7. – Paul Rudd'
]
我希望做到的是:

[
   {
      movie: "This is movie number 1.",
      actor: "Robert Downey Jr"
   },
   {
      movie: "This is movie number 2.",
      actor: "Ben Afleck"
   },
   {
      movie: "This is movie number 3.",
      actor: "Chris Evans"
   },
   {
      movie: "This is movie number 4.",
      actor: "Robin Williams"
   },
   {
      movie: "This - is movie - number 5.",
      actor: "Al Pacino"
   },
   {
      movie: "This is movie number 6.",
      actor: "Dwayne Johnson"
   },
   {
      movie: "This is - movie number 7.",
      actor: "Paul Rudd"
   }
]
以下是我迄今为止所尝试的:

const arr=[
这是第一部电影-小罗伯特·唐尼,
“这是第二部电影。-本·阿弗莱克”,
“这是第三部电影。”-克里斯·埃文斯,
“这是第四部电影。-罗宾·威廉姆斯”,
“这是第五部电影-艾尔·帕西诺”,
“这是第六部电影-德韦恩·约翰逊”,
这是第七部电影-保罗·陆克文
];
const newArr=arr.map((el)=>{
const movie=el.split('-').shift();
常量actor=el.split('-').pop();
返回{
电影:电影,,
演员:演员
}
});

console.log(newArr)
您可以使用lastindexof和substring来获取所需内容。若演员的名字中也有“-”的话,唯一的问题可能会出现。但休息很好

const arr=[
这是第一部电影-小罗伯特·唐尼,
“这是第二部电影。-本·阿弗莱克”,
“这是第三部电影。”-克里斯·埃文斯,
“这是第四部电影。-罗宾·威廉姆斯”,
“这是第五部电影-艾尔·帕西诺”,
“这是第六部电影-德韦恩·约翰逊”,
这是第七部电影-保罗·陆克文
];
const newArr=arr.map((el)=>{
常数idx=el.lastIndexOf(“–”);
const movie=el.子串(0,idx);
常数actor=el.子串(idx+1);
返回{
电影:电影,,
演员:演员
}
});

console.log(newArr)
由于示例数据中的字符串和您的代码使用了不同类型的
-
:-vs-

const arr=[
这是第一部电影-小罗伯特·唐尼,
“这是第二部电影。-本·阿弗莱克”,
“这是第三部电影。”-克里斯·埃文斯,
“这是第四部电影。-罗宾·威廉姆斯”,
“这是第五部电影-艾尔·帕西诺”,
“这是第六部电影-德韦恩·约翰逊”,
这是第七部电影-保罗·陆克文
];
const newArr=arr.map((el)=>{
const movie=el.split('-').shift();
常量actor=el.split('-').pop();
返回{
电影:电影,,
演员:演员
}
});
log(newArr)
使用reducer()和来确定子字符串

const arr=[
这是第一部电影-小罗伯特·唐尼,
“这是第二部电影。-本·阿弗莱克”,
“这是第三部电影。”-克里斯·埃文斯,
“这是第四部电影。-罗宾·威廉姆斯”,
“这是第五部电影-艾尔·帕西诺”,
“这是第六部电影-德韦恩·约翰逊”,
这是第七部电影-保罗·陆克文
];
常数arrAsObj=arr.reduce((acc,val)=>[
…acc,
{电影:val.slice(0,val.lastIndexOf(“–”),
参与者:val.slice(val.lastIndexOf(“–”)+3.trim()}],];

控制台日志(arrAsObj)尝试使用stringValue。lastIndexOf(“-”)您的最后一个连字符是
-
,它与前面字符串中的其他连字符不同
-
。按
-
而不是
-
拆分应该可以工作如果总是这样,我可以同时使用这两种变体吗?