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))语句未运行。
有什么想法吗?
答案 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))
下,您正在比较i
和j
的索引,该索引包含0
到3
的数字(数据。长度)。在您的数组中,所有值均已设置为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