!==比较运算符应该为真,但不是

时间:2018-10-23 14:04:10

标签: javascript arrays if-statement comparison

function nonUniqueElements(data) {
  var duplicates = [];
  var compArr = data;

  for (var i = 0; i < data.length; i++) {
    for (var j = 0; j < compArr.length; j++) {
      console.log('Comparing ' + data[i] + ' to ' + compArr[j]);
      if (data[i] === compArr[j]) {
        console.log('Found match first pass');
        console.log(data.indexOf(i), compArr.indexOf(j));
        if (data.indexOf(i) !== compArr.indexOf(j)) {
          console.log('Also passes second pass')
          console.log('Pushing ' + data[i] + ' to new array')
          duplicates.push(data[i]);
          console.log(duplicates);
        }
      }
    }
    console.log('End of run through');
  }

  return (duplicates);
}

console.log(nonUniqueElements([5, 5, 5, 5]));

我试图返回数组中的所有非唯一值。我已经复制了数组,并且正在运行一个嵌套循环,以将副本与原始副本进行比较。

当找到匹配项时(在这种情况下是每次),将进行第二次检查以确保仅将不同索引处的值推送到新数组中。

我放置了一些 console.log()来帮助我逐步完成程序。即使 console.log(data.indexOf(i),compArr.indexOf(j))打印不同的值时, if(data.indexOf(i)! == compArr.indexOf(j))语句未运行。

有什么想法吗?

4 个答案:

答案 0 :(得分:1)

在JS中,indexOf()方法返回字符串/数组中第一次出现指定值的位置。您可以说出这是错误的,因为在console.log中,您始终获得值-1。 您需要比较的是data [i]和compArr [j]。

答案 1 :(得分:0)

使用Array.reduce可能更简单...

var array = [1,2,3,4,5,6,4,5,66,44,66]

var result = array.reduce((prev,value) => { 
                if ( prev.exists[value] ) { prev.dupes[value] = true; } 
                prev.exists[value] = true; 
                return prev; 
              },{ exists: {}, dupes: {} })
              
var duplicates = Object.keys(result.dupes);

console.log('duplicates',duplicates);

var filterDupes = array.filter(value => result.dupes[value])

console.log('fitlerDupes',filterDupes);

var mapDupes = array.map(value => result.dupes[value] ? value : null)

console.log('mapDupes',mapDupes);

for ( var i = 0; i < array.length; i ++ ) {
  if ( !result.dupes[array[i]] ) { array.splice(i,1); i--; }
}

console.log('Original Array',array);

答案 2 :(得分:0)

train, test = series[:size], series[size:size+(28*4*24)]

train = train.loc[:, (train != train.iloc[0]).any()] # https://stackoverflow.com/questions/20209600/panda-dataframe-remove-constant-column
test = test.loc[:, (test != test.iloc[0]).any()]
#print(train.var(), X.info())

# train autoregression
model = VARMAX(train[endogdiffs], exog=train[exog])

model_fit = model.fit(model='cg')
#print(model_fit.mle_retvals)

model_fit.plot_diagnostics()

##window = model_fit.k_ar
coef = model_fit.params

predictions = pd.DataFrame()
predictions = model_fit.forecast(steps=len(test), exog=test[exog])
y = predictions.copy()

为什么要比较i和j的索引? i和j本身就是索引,而不是元素。 你不是说

if (data.indexOf(i) !== compArr.indexOf(j)) {

答案 3 :(得分:0)

您正在尝试比较两个true值。

看看indexOf的定义是:

  • Array.indexOf:方法返回可以在数组中找到给定元素的第一个索引;如果不存在,则返回-1。

  • String.indexOf:方法返回指定值首次出现的调用String对象内的索引,从fromIndex开始搜索。如果找不到该值,则返回-1。

因此,在您的条件if (data.indexOf(i) !== compArr.indexOf(j))下,您正在比较ij的索引,该索引包含03的数字(数据。长度)。在您的数组中,所有值均已设置为5,这是您获得-1来回报indexOf[5,5,5,5].indexOf(0) === -1的原因。

如果要比较数据数组中的值,则必须比较值而不是值的索引。像这样:if (data[i] !== compArr[j])

最后,我建议您阅读本文档Truthy and Falsy: When All is Not Equal in JavaScript