javascript按值过滤

时间:2017-04-25 20:35:30

标签: javascript json data-structures

给定下面列出的表单对象,获取包含特定值的键的最佳方法是什么?例如,在以下结构中,如果我们想要拥有property1的所有对象,我们应该将object1和object2作为答案。 或者这可以存储在特定类型的数据结构中以便快速检索? 在一种方法中循环所有对象的值。我正在寻找比这更快的东西。会很感激的建议。

{
      object1: [property1, property2, property3],
      object2: [property1],
      object3: [property2]
}

6 个答案:

答案 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));