给定下面列出的表单对象,获取包含特定值的键的最佳方法是什么?例如,在以下结构中,如果我们想要拥有property1的所有对象,我们应该将object1和object2作为答案。 或者这可以存储在特定类型的数据结构中以便快速检索? 在一种方法中循环所有对象的值。我正在寻找比这更快的东西。会很感激的建议。
{
object1: [property1, property2, property3],
object2: [property1],
object3: [property2]
}
答案 0 :(得分:0)
尝试这样的事情
x = {
object1: ['property1', 'property2', 'property3'],
object2: ['property1'],
object3: ['property2']
}
z = Object.keys(x).filter(function(y) {
return x[y].indexOf('property1') !== -1
})
console.log(z)

这只是循环,并过滤对象中的每个键,然后对值数组进行相等性检查。有点
答案 1 :(得分:0)
var l = [];
var dict = {...}
for (var key in dict) {
var obj = dict[key];
if (obj.indexOf("property1") != -1) {
l.push(obj);
}
}
l // Here is the result
答案 2 :(得分:0)
只需在filter()
上使用Object.keys(data)
函数,并检查每个对象是否包含该值。如果这是你想要的,你也可以map()
值本身的键。
const data = {
a: [1,2,3],
b: [1],
c: [2]
};
const searchValue = 1;
const keysWithValue = Object.keys(data).filter(key => data[key].includes(searchValue));
const objectsWithValue = keysWithValue.map(key => data[key]);
console.log(keysWithValue, objectsWithValue);
答案 3 :(得分:0)
循环遍历您的阵列并每次使用此测试:
void rotateObjectWithMovement(void functionToDrawObject(), struct point pivot,
float rotationAngle, struct point translation) {
glPushMatrix();
glTranslatef(pivot.x + translation.x, pivot.y + translation.y, 0.0f);
glRotatef(rotationAngle, 0.0f, 0.0f, 1.0f);
glTranslatef(-pivot.x, -pivot.y, 0.0f);
functionToDrawObject();
glPopMatrix();
}
void rotateObjectWithoutMovement(void functionToDrawObject(), struct point pivot,
float rotationAngle) {
static const struct point zero = { 0, 0 };
rotateObjectWithMovement(functionToDrawObject, pivot, rotationAngle, zero);
}
答案 4 :(得分:0)
检查此代码,我认为它会对您有所帮助:
FILENAME="Your/filename.wat"
echo $FILENAME
touch $FILENAME
echo $FILENAME >> TheFilesFileName.txt
cat TheFilesFileName.txt
OLD_FILENAME=$(cat TheFilesFileName.txt)
答案 5 :(得分:0)
如果您想为此目的使用更快的数据结构,那么您可以将对象转换为ES6地图,如下所示:
// Sample object:
var obj = {
key1: [1, 2, 3],
key2: [1],
key3: [2]
};
// Turn into map keyed by values
var m = Object.keys(obj).reduce( (m, key) =>
obj[key].reduce( (m, v) => m.set(v, (m.get(v) || []).concat(key)), m ),
new Map
);
// Example use of the map:
console.log('1 occurs in: ', m.get(1));