【问题标题】:looping through two arrays at the same time Java Script同时遍历两个数组Javascript
【发布时间】:2021-12-30 05:12:59
【问题描述】:

我有一个数组 [name1,item1,name2,item2,name3...] 需要映射到

  {
     "@type": "ListItem",
     position: index + 1,
     name: ,
     item: ,
  }

我尝试将其拆分为两个单独的数组,例如:

  var nameBreadCrumbStructuredData = splitBreadCrumbStructuredData.filter(
    function (value, index, Arr) {
      return index % 2 == 0;
    }
  );

  var urlBreadCrumbStructuredData = splitBreadCrumbStructuredData.filter(
    function (value, index, Arr) {
      return index % 2 == 1;
    }
  );



   var faqStructuredDataSplit = nameBreadCrumbStructuredData.map((i) => {
     urlBreadCrumbStructuredData.map((j) => ({
         "@type": "ListItem",
         position: "",
         name: i,
         item: j,
     }));
   });

但不幸的是它不起作用。我尝试了一些不同的方法,也尝试了 forEach,但我被卡住了。任何人都可以帮助我如何循环一个数组,但每隔一个或两个数组同时循环一次?感谢您的帮助!

因此,我需要通过映射得到这个:

const breadCrumbStructuredData = {
    "@context": "https://schema.org",
    "@type": "BreadcrumbList",
    itemListElement: [
      {
        "@type": "ListItem",
        position: 1,
        name: "nameExample",
        item: "https://example.com/",
      },
      {
        "@type": "ListItem",
        position: 2,
        name: nameExampl1,
        item: "https://example1.com/",
      },
      {
        "@type": "ListItem",
        position: 3,
        name: nameExamp2,
        item: "https://example2.com/",
      },
      {
        "@type": "ListItem",
        position: 4,
        name: nameExamp3,
        item: "https://example3.com/",
      },
    ],
  };

【问题讨论】:

  • 你能指定(或举例)你的输入数组吗?

标签: javascript arrays loops dictionary foreach


【解决方案1】:

如何循环一个数组,但每隔一个元素循环一次

您可以使用常规的 for 循环。

const splitBreadCrumbStructuredData = ["name1", "item1", "name2", "item2", "name3", "item3"];
  var faqStructuredDataSplit = [];
  for(let i = 0, p = 1; i < splitBreadCrumbStructuredData.length; i += 2){
    faqStructuredDataSplit.push ({
      "@type": "ListItem",
        position: p++,
        name: splitBreadCrumbStructuredData[i],
        item: splitBreadCrumbStructuredData[i + 1],
    });
  }

  console.log(faqStructuredDataSplit);

同时两个数组

您不需要在 map 函数中循环这两个数组。

var faqStructuredDataSplit = nameBreadCrumbStructuredData.map((data, index) => ({
  "@type": "ListItem",
  position:  index + 1,
  name: data,
  item: urlBreadCrumbStructuredData[index],
}));

完整代码sn-p

const splitBreadCrumbStructuredData = ["name1", "item1", "name2", "item2", "name3", "item3"];
    var nameBreadCrumbStructuredData = splitBreadCrumbStructuredData.filter(
      function (value, index, Arr) {
        return index % 2 == 0;
      }
    );

    var urlBreadCrumbStructuredData = splitBreadCrumbStructuredData.filter(
      function (value, index, Arr) {
        return index % 2 == 1;
      }
    );
    var faqStructuredDataSplit = nameBreadCrumbStructuredData.map((data, index) => ({
      "@type": "ListItem",
      position:  index + 1,
      name: data,
      item: urlBreadCrumbStructuredData[index],
    }));

    console.log(faqStructuredDataSplit);

【讨论】:

  • 谢谢你,我确实按照你说的做,这是最好的方法。
【解决方案2】:

如果我理解正确,你想转成这样:

["name1","value1","name2", "value2"]

进入

[
  {position: 1,name: "name1",item: "value1"},
  {position: 2,name: "name2",item: "value2"}
]

这可以一次性完成,而无需创建 2 个单独的数组

const input = ["name1","value1","name2", "value2"];

const result = [];
for(let i=0,p=1; i<input.length;i+=2,p++){
   result.push( { position: p, name: input[i], item: input[i+1] } );
}

console.log(result);

您对想要的结果有更多的结构,这很好......只需将其添加到:

const input = ["name1","value1","name2", "value2"];

const breadCrumbStructuredData = {
    "@context": "https://schema.org",
    "@type": "BreadcrumbList",
    itemListElement:[]
}

for(let i=0,p=1; i<input.length;i+=2,p++){
   breadCrumbStructuredData.itemListElement.push( { "@type":"ListItem", position: p, name: input[i], item: input[i+1] } );
}

console.log(breadCrumbStructuredData);

【讨论】:

    猜你喜欢
    • 2022-08-30
    • 2022-08-30
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    相关资源
    最近更新 更多