【发布时间】:2015-08-29 13:17:27
【问题描述】:
我正在尝试获取一个数组(例如,一个年份数组),然后制作一个新的子数组数组,它首先告诉原始数组中的唯一元素,其次是多少时间它被重复了。
例如,假设我从一个数字数组开始 [1999, 1999, 2000, 2005, 2005, 2005, 2015]
我希望我的函数返回像[[1999, 2], [2000, 1], [2005, 3], [2015, 1] ]这样的数组
因为1999年重复了两次,2000年没有重复,2005年重复了3次,等等。
我可以成功创建一个删除重复项的新数组,但是在创建子数组时我遇到了一些奇怪的行为。
编辑
这是我自己的错误解决方案,以防有人想指出我做错了什么。
var populateYearsList = function(yearsDuplicate){
var uniqueYears = [];
for (var i=0; i < yearsDuplicate.length; i++){
if(uniqueYears.indexOf(yearsDuplicate[i]) == -1){
uniqueYears.push(yearsDuplicate[i])
} else {
console.log("duplicate found") };
}
console.log (uniqueYears)
};
我遇到了尝试将uniqueYears.push(yearsDuplicate[i]) 更改为uniqueYears.push([ yearsDuplicate[i], 1 ]) 然后尝试将我的console.log 替换为某种递增计数器的问题。
【问题讨论】:
-
到目前为止你的代码是什么,奇怪的行为是什么?
-
所以你想要一个包含五个数组的数组。像这样在新数组中推送对象怎么样->
var filteredArr = [{"year":1999, "amount": 2}, {"year":2000, "amount":1}] -
@Rhumborl 我刚刚编辑了我的条目以展示我尝试过的奇怪解决方案。每当我尝试推送一个数组而不仅仅是年份时,我的循环就会停止工作。
标签: javascript arrays algorithm unique repeat