如何解决将数组中的多个索引与另一个数组中的多个索引进行比较
我想知道是否有一种巧妙的方法来比较(!= 或 ==)数组中的多个值(多个索引)与另一个数组中的多个值(多个索引)。让我更深入地解释一下。
我有一个函数的连续列表输入,我想将列表作为“行”添加到我的数据数组中,所以是这样的:
var data = new Array();
function compare() {
// lets say all the input lists have 4 elements,example [100,200,300,400].
var input_list = arrayfromargs(arguments);
// concat the input with my data variable.
data = data.concat([input_list]);
}
但是,如果数据数组中已经存在一行在特定索引处具有相同的值,我不想将输入列表作为一行添加到数据数组中。
例如,假设我想比较最后一个和倒数第二个索引的值(因此在上面的示例中索引 2 和 3(值 300 和 400))。我怎样才能最好地将第 2 个和第 3 个索引处的输入列表值与数据数组行中第 2 个和第 3 个索引处的每个值进行比较?
我知道最明显的方法是将 if-else 嵌套在 for 循环中,但是,这很快就会变得非常混乱。
有没有更精致或更优雅的方法来实现这一点?
解决方法
假设您逐个添加数据数组,您可以维护类似哈希表的内容:
// lookup table to keep track of last two indices
var hashTable = {};
// array of arrays with no matching final pairs
var dataArray = [];
function addToArray(input) {
// ignore short input arrays
if (input.length < 2) return;
// get the last two entries of the input array
var a = input[input.length - 2];
var b = input[input.length - 1];
// return if we’ve seen these entries before
if (hashTable[a] && hashTable[a][b]) return;
// add the new entries to the hash table
if (!hashTable[a]) {
hashTable[a] = {};
}
hashTable[a][b] = true;
// add the full input to the data array
dataArray.push(input);
}
对于您的示例数据:
addToArray([1,2,3,4]);
// hashTable = {
// 3: { 4: true }
// }
addToArray([5,6,7,8]);
// hashTable = {
// 3: { 4: true },// 7: { 8: true }
// }
addToArray([9,10,8]);
// hashTable[7][8] === true,so this addition fails
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。