【问题标题】:From an array of objects, extract selected objects and create new array从对象数组中提取选定对象并创建新数组
【发布时间】:2020-01-26 20:03:33
【问题描述】:

我有一组像这样的对象:

var myArray = [
  {"domain":"mysite.es","id":12,"selected":false},
  {"domain":"mysite.bg","id":51,"selected":false},
  {"domain":"mysite.uk","id":41,"selected":false},
  {"domain":"mysite.bg","id":36,"selected":false},
  {"domain":"mysite.pt","id":14,"selected":false},
  {"domain":"mysite.it","id":78,"selected":false},
  {"domain":"mysite.gr","id":71,"selected":false},
  {"domain":"mysite.dr","id":73,"selected":false}
]

我需要使用选定的对象从 myArray 创建三个新数组。例如:

firstArrayFromMyArray 将包含索引为 0,2 和 4 的对象, secondArrayFromMyArray 将包含索引为 1 和 4 的对象, thirdArrayFromMyArray 将包含索引为 6 和 7 的对象

按照上面的例子,firstArrayFromMyArray 的输出应该是这样的:

firstArrayFromMyArray = [
  {"domain":"mysite.es","id":12,"selected":false},
  {"domain":"mysite.uk","id":41,"selected":false},
  {"domain":"mysite.pt","id":14,"selected":false}
]

最好的方法是什么?

【问题讨论】:

  • 最佳方法是什么? 您可以使用循环并处理您的逻辑。但是,如果没有看到您的尝试,我们几乎无能为力。所以请分享一下。
  • 试试array.filter
  • 这是一种非常非常糟糕的数据处理方式。如果您的数据顺序发生变化,您必须重写逻辑,这违背了自动化的目的。
  • 您说您需要将第一个数组作为索引 0、2、5,但在您的示例中您显示的是 0、2 和 4。那么,它是什么?

标签: javascript arrays object javascript-objects clone


【解决方案1】:

您可以获取每个索引的目标对象并将所需对象推送到新的外部索引。

var array = [{ domain: "mysite.es", id: 12, selected: false }, { domain: "mysite.bg", id: 51, selected: false }, { domain: "mysite.uk", id: 41, selected: false }, { domain: "mysite.bg", id: 36, selected: false }, { domain: "mysite.pt", id: 14, selected: false }, { domain: "mysite.it", id: 78, selected: false }, { domain: "mysite.gr", id: 71, selected: false }, { domain: "mysite.dr", id: 73, selected: false }],
    targets = { 0: 0, 2: 0, 5: 0, 1: 1, 5: 1, 6: 2, 7: 2 },
    result = array.reduce((r, o, i) => {
        (r[targets[i]] = r[targets[i]] || []).push(o);
        return r;
    }, []);
    
console.log(result);

【讨论】:

    【解决方案2】:

    var myArray = [
      {"domain":"mysite.es","id":12,"selected":false},
      {"domain":"mysite.bg","id":51,"selected":false},
      {"domain":"mysite.uk","id":41,"selected":false},
      {"domain":"mysite.bg","id":36,"selected":false},
      {"domain":"mysite.pt","id":14,"selected":false},
      {"domain":"mysite.it","id":78,"selected":false},
      {"domain":"mysite.gr","id":71,"selected":false},
      {"domain":"mysite.dr","id":73,"selected":false}
    ];
    
    function get3Arrays(myArray)
    {
    	let ary = [];
    	ary.push([myArray[0], myArray[2], myArray[5]]);
    	ary.push([myArray[1], myArray[4]]);
    	ary.push([myArray[6], myArray[7]]);
    	return ary;
    }
    
    let aryOfArrays = get3Arrays(myArray);
    
    console.log('1st Array', aryOfArrays[0]);
    console.log('2nd Array', aryOfArrays[1]);
    console.log('3rd Array', aryOfArrays[2]);

    【讨论】:

      【解决方案3】:

      我想推荐使用reduce

      const {
        firstArrayFromMyArray,
        secondArrayFromMyArray,
        thirdArrayFromMyArray,
      } = myArray.reduce((acc, ele, index) => {
        if (index === 0 || index === 2 || index === 5) {
          acc.firstArrayFromMyArray.push(ele);
        } else if (index === 1 || index === 4) {
          acc.secondArrayFromMyArray.push(ele);
        } else if (index === 6 || index === 7) {
          acc.thirdArrayFromMyArray.push(ele);
        }
        return acc;
      }, {
        firstArrayFromMyArray: [],
        secondArrayFromMyArray: [],
        thirdArrayFromMyArray: [],
      });
      

      【讨论】:

        猜你喜欢
        • 2023-02-09
        • 2021-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-12
        • 1970-01-01
        • 2020-06-08
        相关资源
        最近更新 更多