IndexedDB 的多查询很奇怪
IndexedDB's multi-query is weird
我做到了.createIndex('abcIDX', ['A', 'B', 'C'])
。
但是,我觉得结果很奇怪,所以我做了以下测试。
// All methods except "IDBKeyRange.only()" are weird.;
const range = IDBKeyRange.lowerBound( [5,5,5] );
function test( arr ) {
console.log( range.includes(arr) );
}
test([5,5,5]); // case1: true
test([5,5,1]); // case2: false
test([5,6,1]); // case3: true ?
test([6,1,1]); // case4: true ??
test([1,6,1]); // case5: false ??
我认为 IDBKeyRange
的工作方式与 A && B && C
相同。
案例 1 和案例 2 是正确的。
但情况 3 和情况 4 不是。所以我猜它适用于 ||
,而不适用于 &&
。
然而,案例2和案例5表明推测是错误的。
Whosebug 表现出色 answer。这是我阅读此答案后的理解。
It's work A || (A && B) || (A && B && C)
.
然而,案例2表明推测是错误的。
我哪里错了?还是我用错了?请帮助我...
如果将数字映射到字符,并想到字符串比较,比较可能更容易理解。 A=1,B=2,E=5,F=6。所以 [5,5,5] 是“EEE”
range = IDBKeyRange.lowerBound( [5,5,5] ); // think of this as "EEE"
test([5,5,5]); // case1: "EEE" >= "EEE" ? true
test([5,5,1]); // case2: "EEA" >= "EEE" ? false
test([5,6,1]); // case3: "EFA" >= "EEE" ? true
test([6,1,1]); // case4: "FAA" >= "EEE" ? true
test([1,6,1]); // case5: "AFA" >= "EEE" ? false
实际逻辑基本上是:
((test[0] > range[0])) ||
((test[0] == range[0]) && (test[1] > range[1])) ||
((test[0] == range[0]) && (test[1] == range[1]) && (test[2] >= range[2]))
我做到了.createIndex('abcIDX', ['A', 'B', 'C'])
。
但是,我觉得结果很奇怪,所以我做了以下测试。
// All methods except "IDBKeyRange.only()" are weird.;
const range = IDBKeyRange.lowerBound( [5,5,5] );
function test( arr ) {
console.log( range.includes(arr) );
}
test([5,5,5]); // case1: true
test([5,5,1]); // case2: false
test([5,6,1]); // case3: true ?
test([6,1,1]); // case4: true ??
test([1,6,1]); // case5: false ??
我认为 IDBKeyRange
的工作方式与 A && B && C
相同。
案例 1 和案例 2 是正确的。
但情况 3 和情况 4 不是。所以我猜它适用于 ||
,而不适用于 &&
。
然而,案例2和案例5表明推测是错误的。
Whosebug 表现出色 answer。这是我阅读此答案后的理解。
It's work
A || (A && B) || (A && B && C)
.
然而,案例2表明推测是错误的。
我哪里错了?还是我用错了?请帮助我...
如果将数字映射到字符,并想到字符串比较,比较可能更容易理解。 A=1,B=2,E=5,F=6。所以 [5,5,5] 是“EEE”
range = IDBKeyRange.lowerBound( [5,5,5] ); // think of this as "EEE"
test([5,5,5]); // case1: "EEE" >= "EEE" ? true
test([5,5,1]); // case2: "EEA" >= "EEE" ? false
test([5,6,1]); // case3: "EFA" >= "EEE" ? true
test([6,1,1]); // case4: "FAA" >= "EEE" ? true
test([1,6,1]); // case5: "AFA" >= "EEE" ? false
实际逻辑基本上是:
((test[0] > range[0])) ||
((test[0] == range[0]) && (test[1] > range[1])) ||
((test[0] == range[0]) && (test[1] == range[1]) && (test[2] >= range[2]))