Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.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/jQuery比较数组中的项_Javascript_Jquery_Html_Arrays - Fatal编程技术网

JavaScript/jQuery比较数组中的项

JavaScript/jQuery比较数组中的项,javascript,jquery,html,arrays,Javascript,Jquery,Html,Arrays,我试图做的是比较数组中的项目,以确定谁先被列出,为简单起见,在我看来,所有的个人数据都存储在同一个位置。我不知道分离这些数据是更容易还是更有效 这是数组,为了可读性缩小了 var People = [{ "Name": "Person1", "SN": "1", "First": "5", "Second": "6", "Third": "11", "Fourth": "7", "Fifth": "8", "Sixth": "1",

我试图做的是比较数组中的项目,以确定谁先被列出,为简单起见,在我看来,所有的个人数据都存储在同一个位置。我不知道分离这些数据是更容易还是更有效

这是数组,为了可读性缩小了

var People = [{
    "Name": "Person1",
    "SN": "1",
    "First": "5",
    "Second": "6",
    "Third": "11",
    "Fourth": "7",
    "Fifth": "8",
    "Sixth": "1",
    "Seventh": "10",
    "Eigth": "4",
    "Ninth": "3",
    "Tenth": "2",
    "Eleventh": "13",
    "Twelth": "9",
    "Thirteenth": "12",
    "RDO1": 2,
    "RDO2": 3
}, {
    "Name": "Person2",
    "SN": "2",
    "First": "6",
    "Second": "5",
    "Third": "10",
    "Fourth": "9",
    "Fifth": "7",
    "Sixth": "8",
    "Seventh": "1",
    "Eigth": "4",
    "Ninth": "3",
    "Tenth": "2",
    "Eleventh": "13",
    "Twelth": "11",
    "Thirteenth": "12",
    "RDO1": 2,
    "RDO2": 3
}, {
    "Name": "Person3",
    "SN": "3",
    "First": "6",
    "Second": "9",
    "Third": "7",
    "Fourth": "10",
    "Fifth": "8",
    "Sixth": "5",
    "Seventh": "4",
    "Eigth": "2",
    "Ninth": "3",
    "Tenth": "13",
    "Eleventh": "11",
    "Twelth": "12",
    "Thirteenth": "1",
    "RDO1": 4,
    "RDO2": 5
}];
我尝试了一系列嵌套的if,for循环,以及相互循环的函数,但都没有成功

因此,我试图实现的是,它将获取第一个选择,并与阵列中的其他人进行比较,如果其他人有相同的第一个选择,它将比较序列号,以查看两者中较低的一个

因此,在上面的数组中,当代码到达Person3并将6视为第一选择时,它会查看是否有其他人将6视为第一选择,并注意Person2也选择了6。然后,它比较序列号,不给Person3 6,因为Person2的数字较低,所以它将Person3移到第二位,并再次执行相同的检查

我已经为此绞尽脑汁有一段时间了,如果有人能告诉我这件事,我将不胜感激

编辑-更多代码


}

您可以根据需要调整以下功能。我实现了它,用每个选项和每个选项名称的获胜者填充对象:

var winners = {};

function getChoiceWinner(choiceName) {
    for (var i = 0; i < People.length; i++) {
        var choice = People[i][choiceName];
        if(!winners[choiceName]) winners[choiceName] = {};
        winners[choiceName][choice] = People[i];
        for (var j = 0; j < People.length; j++) {
            if (winners[choiceName][choice][choiceName] == People[j][choiceName]) {
                winners[choiceName][choice] = People[j]["SN"] < winners[choiceName][choice]["SN"] ? People[j] : winners[choiceName][choice];
            }
        }
    }
}

在做了一些你需要的工作后,我有了一个解决方案。。我想

输出有点凌乱,但由于数组将更大,因此将首先按SN对所有内容进行分组

这是小提琴,您可以测试它:

这与最后一个答案的区别在于,这是动态的。因此,基本上,您可以继续进入数组并对不同的属性进行排序

此外,如果您想更改属性,它的可维护性也会更高


因此,对于您需要的内容,请列出属性。。只需按顺序打印数组,您就可以先按顺序列出所有内容,然后按顺序列出所有内容。

@Hintshigen在应用所有规则后,什么是desire output?您查看过该实用程序吗?@ozil所需的输出将是人名,然后是旁边列出的选项,但只有一个人可以有一个选项,所以两个人没有选择的余地displayed@urbz我没有,但现在看一下,谢谢,我也不知道预期结果是什么,但听起来你可以使用递归。谢谢,我可以稍微更改一下,以显示我正在查找的信息。我不认为这个解决方案是可能的,感谢您花时间。哇,这个也很好,感谢您花时间深入研究,它肯定会对扩展阵列有所帮助。如果我有资格投票给你,我会的。取而代之的是我的感谢!
var winners = {};

function getChoiceWinner(choiceName) {
    for (var i = 0; i < People.length; i++) {
        var choice = People[i][choiceName];
        if(!winners[choiceName]) winners[choiceName] = {};
        winners[choiceName][choice] = People[i];
        for (var j = 0; j < People.length; j++) {
            if (winners[choiceName][choice][choiceName] == People[j][choiceName]) {
                winners[choiceName][choice] = People[j]["SN"] < winners[choiceName][choice]["SN"] ? People[j] : winners[choiceName][choice];
            }
        }
    }
}
function groupBy( array , f )
{
  var groups = {};
  array.forEach( function( o )
  {
    var group = JSON.stringify( f(o) );
    groups[group] = groups[group] || [];
    groups[group].push( o );  
  });
  return Object.keys(groups).map( function( group )
  {
    return groups[group]; 
  })
}

var groupedByFirst = groupBy(People, function(item)
{
  return [item.First];
});

var finalGrouping = new Array;
 for (i = 0; i <= groupedByFirst.length-1; i++) {
     var test = groupBy(groupedByFirst[i], function(item) {
        return [item.SN]
    });
    finalGrouping.push(test);
}
console.log(finalGrouping)