Javascript 仅求和唯一数组

Javascript 仅求和唯一数组,javascript,Javascript,首先,如果这是一个简单的问题,我很抱歉,但在我的程序中,我很难只选择唯一的数组(我只是在学习javasript btw)。我知道我可以很容易地做到这一点与内置的功能,如过滤器或地图,但我被禁止这样做。 这就是我目前得到的: function countUnique (numbers) { var sorted_numbers = numbers.sort(function(a,b){return a-b}) var result = [] for (var i = 0 ; i<numbe

首先,如果这是一个简单的问题,我很抱歉,但在我的程序中,我很难只选择唯一的数组(我只是在学习javasript btw)。我知道我可以很容易地做到这一点与内置的功能,如过滤器或地图,但我被禁止这样做。 这就是我目前得到的:

function countUnique (numbers) { 
var sorted_numbers = numbers.sort(function(a,b){return a-b})
var result = []
for (var i = 0 ; i<numbers.length; i++){
if (numbers[i]!==numbers[i+1]){
  result.push(numbers[i])
  console.log(result)
}
}
var sum = 0
for (var j = 0; j<result.length; j++) {
sum = sum + result[j]
}
 return sum
}

console.log(countUnique([ 5, 5, 6, 6, 3, 1, 2, 7, 7])) // 6
console.log(countUnique([ 3, 6, 3, 6, 1, 1, 2, 1 ]))  // 2
console.log(countUnique([ 3, 3, 3, 3, 4, 5, 8, 10, 11 ])) // 38
函数countUnique(数字){
var sorted_numbers=numbers.sort(函数(a,b){返回a-b})
var结果=[]

对于(var i=0;i设置这样的内部循环

for (var i = 0 ; i<numbers.length; i++){
  for(var j = 0; j<numbers.length; j++) {
    if (numbers[i] + 1 === numbers[j]){
      result.push(numbers[i])
      console.log(result)
    }
  }
}

for(var i=0;i使用indexOf和lastIndexOf。如果indexOf的结果等于lastIndexOf的结果,则表示元素在数组中是唯一的

让arr=[3,3,3,4,5,8,10,11];
设和=0;
arr.forEach(a=>{
sum+=(arr.indexOf(a)==arr.lastIndexOf(a))?a:0;
});

console.log(sum);
您可以使用对象来确定唯一的数字。这可能有点复杂,但如果数组很长,它会非常有用

函数countUnique(数字){
var计数器={};
var总和=0;
//相应地记录所有数字
for(数值中的变量n){
//数组中的当前数字
var num=数字[n];
/*
这基本上检查计数器对象是否包含该属性
(数组中的任意数字)。如果它不包含它,则
将其添加为属性值为1的属性
(表示数组中当前有一个唯一的数字)。如果有
包含它,那么它只需将1添加到属性值中,表示存在
同一数字的多个
*/
(计数器[num]==null)?计数器[num]=1:计数器[num]++;
}
/*
在我们完成数组的遍历之后,我们将
通过对象属性,仅添加值为1的属性
(表示它们是唯一的)并在属性值大于0时添加0
不止一个
*/
用于(计数器中的var c){
和+=(计数器[c]==1)?c:0;
}
回报金额;
}
log(countUnique([5,5,6,6,3,1,2,7,7]);//6
log(countUnique([3,6,3,6,1,1,2,1]);//2
log(countUnique([3,3,3,3,4,5,8,10,11]);/38
//这里的数组与您在问题中使用的数组完全相同
常量numbers1=[5,5,6,6,3,1,2,7,7];//6
常量numbers2=[3,6,3,6,1,1,2,1];//2
常量numbers3=[3,3,3,4,5,8,10,11];//38
//这里我们有一个函数,可以查找不重复的数字
//我们不仅在一个数字出现不止一次时删除重复项,我们根本不包括它
函数notRepeatedNum(arr){
让结果=[];
设ctr=0;
对于(设x=0;x=2,则数字重复,否则将其推送到数组
如果(ctr<2){
结果推送(arr[x]);
}
}
返回结果;
}
//在这里,我们使用函数查找那些不重复的项并将其存储在变量中
const nonrepiting1=notRepeatedNum(numbers1);
const nonrepiting2=notRepeatedNum(numbers2);
const nonrepiting3=notRepeatedNum(numbers3);
//这里我们将把不重复的数字求和为一个值
函数sumIt(数字){
设和=0;
for(设b=0;bconsole.log(sumIt(非响应3))/38
你能详细说明一下吗,我对嵌套循环的理解有点低嵌套循环总是从一开始就扫描,这样它就不会像你的循环一样漏掉一个数字,因为它不会是下一个数字它可能像3个或更多个数字,你必须循环它,否则你需要硬编码数组中的每个数字检查。
数字[i]!==数字[i+1]
只检查i和i+1,但可能是i和i+5..所以你在另一边循环所有i来检查每个数字。无论如何,我的解决方案可能是错误的抱歉,试试看,不管怎样。我做了一点修复,仍然没有得到你的数字,但这就是我理解问题的方式。抱歉,我忘了告诉你,约束也在这个loo中ks喜欢最好的一个谢谢你的洞察力,但我几乎不接触物体:)哦,我很抱歉,我忘了考虑你可能有限制或者你可能不理解。如果你不理解,我在评论中添加了注释,带你了解整个过程。你能使用集合运算符吗?嗯,没有提到集合运算符,所以我猜yeahSet构造函数不能过滤唯一值,它只是不允许w具有非唯一值,这与此问题无关。