2017-04-02 96 views
0

我有这样的对象:Javascript:如何获取/选择具有相同键的所有对象?

[ 
    { 
    "id": 1, 
    "name": "App 1", 
    "desc": "Donec rutrum congue leo eget malesuada. Curabitur aliquet quam id dui posuere blandit. Nulla quis lorem ut libero malesuada feugiat. Donec sollicitudin molestie malesuada. Nulla quis lorem ut libero malesuada feugiat.", 
    "nick": "app1", 
    "kat": "tkj" 
    }, 
    { 
    "id": 2, 
    "name": "App 2", 
    "desc": "Donec rutrum congue leo eget malesuada. Curabitur aliquet quam id dui posuere blandit. Nulla quis lorem ut libero malesuada feugiat. Donec sollicitudin molestie malesuada. Nulla quis lorem ut libero malesuada feugiat.", 
    "nick": "app2", 
    "kat": "tkj" 
    }, 
    { 
    "id": 3, 
    "name": "App 3", 
    "desc": "Donec rutrum congue leo eget malesuada. Curabitur aliquet quam id dui posuere blandit. Nulla quis lorem ut libero malesuada feugiat. Donec sollicitudin molestie malesuada. Nulla quis lorem ut libero malesuada feugiat.", 
    "nick": "app3", 
    "kat": "tei" 
    }, 
    { 
    "id": 4, 
    "name": "App 4", 
    "desc": "Donec rutrum congue leo eget malesuada. Curabitur aliquet quam id dui posuere blandit. Nulla quis lorem ut libero malesuada feugiat. Donec sollicitudin molestie malesuada. Nulla quis lorem ut libero malesuada feugiat.", 
    "nick": "app4", 
    "kat": "tei" 
    }, 
    { 
    "id": 5, 
    "name": "App 5", 
    "desc": "Donec rutrum congue leo eget malesuada. Curabitur aliquet quam id dui posuere blandit. Nulla quis lorem ut libero malesuada feugiat. Donec sollicitudin molestie malesuada. Nulla quis lorem ut libero malesuada feugiat.", 
    "nick": "app5", 
    "kat": "tei" 
    } 
] 

如何到/选择在JavaScript中相同的密钥(KAT)的所有对象?

例如,我想用吉的所有对象= TKJ将返回:

[{ 
    "id": 1, 
    "name": "App 1", 
    "desc": "Donec rutrum congue leo eget malesuada. Curabitur aliquet quam id dui posuere blandit. Nulla quis lorem ut libero malesuada feugiat. Donec sollicitudin molestie malesuada. Nulla quis lorem ut libero malesuada feugiat.", 
    "nick": "app1", 
    "kat": "tkj" 
    }, 
    { 
    "id": 2, 
    "name": "App 2", 
    "desc": "Donec rutrum congue leo eget malesuada. Curabitur aliquet quam id dui posuere blandit. Nulla quis lorem ut libero malesuada feugiat. Donec sollicitudin molestie malesuada. Nulla quis lorem ut libero malesuada feugiat.", 
    "nick": "app2", 
    "kat": "tkj" 
    }] 

感谢您的帮助^ _^

+1

的可能的复制循环[使用Javascript?如何筛选基于属性对象阵列(http://stackoverflow.com/questions/2722159/javascript-how-to-filter-object- array-based-on-attributes) – tocqueville

回答

0

这里工作例如,我准备了两个工作函数,一个是纯JavaScript,另一个是ES6。

// PureJS 
 
function findObjectsByKeyValue(object, key, value) { 
 
    var result = []; 
 

 
    for (i = 0; i < object.length; i++) { 
 
    var element = object[i]; 
 
    
 
    if (element[key] === value) { 
 
     result.push(element); 
 
    } 
 
    } 
 
    
 
    return result; 
 
} 
 

 
// ES6 
 
function findObjectsByKeyValueES6(object, key, value) { 
 
    return object.filter(element => { 
 
    return element[key] === value 
 
    }); 
 
} 
 

 
var obj = [ 
 
    { 
 
    "id": 1, 
 
    "name": "App 1", 
 
    "desc": "Donec rutrum congue leo eget malesuada. Curabitur aliquet quam id dui posuere blandit. Nulla quis lorem ut libero malesuada feugiat. Donec sollicitudin molestie malesuada. Nulla quis lorem ut libero malesuada feugiat.", 
 
    "nick": "app1", 
 
    "kat": "tkj" 
 
    }, 
 
    { 
 
    "id": 2, 
 
    "name": "App 2", 
 
    "desc": "Donec rutrum congue leo eget malesuada. Curabitur aliquet quam id dui posuere blandit. Nulla quis lorem ut libero malesuada feugiat. Donec sollicitudin molestie malesuada. Nulla quis lorem ut libero malesuada feugiat.", 
 
    "nick": "app2", 
 
    "kat": "tkj" 
 
    }, 
 
    { 
 
    "id": 3, 
 
    "name": "App 3", 
 
    "desc": "Donec rutrum congue leo eget malesuada. Curabitur aliquet quam id dui posuere blandit. Nulla quis lorem ut libero malesuada feugiat. Donec sollicitudin molestie malesuada. Nulla quis lorem ut libero malesuada feugiat.", 
 
    "nick": "app3", 
 
    "kat": "tei" 
 
    }, 
 
    { 
 
    "id": 4, 
 
    "name": "App 4", 
 
    "desc": "Donec rutrum congue leo eget malesuada. Curabitur aliquet quam id dui posuere blandit. Nulla quis lorem ut libero malesuada feugiat. Donec sollicitudin molestie malesuada. Nulla quis lorem ut libero malesuada feugiat.", 
 
    "nick": "app4", 
 
    "kat": "tei" 
 
    }, 
 
    { 
 
    "id": 5, 
 
    "name": "App 5", 
 
    "desc": "Donec rutrum congue leo eget malesuada. Curabitur aliquet quam id dui posuere blandit. Nulla quis lorem ut libero malesuada feugiat. Donec sollicitudin molestie malesuada. Nulla quis lorem ut libero malesuada feugiat.", 
 
    "nick": "app5", 
 
    "kat": "tei" 
 
    } 
 
]; 
 

 
// Pure JS 
 
var result = findObjectsByKeyValue(obj, 'kat', 'tkj'); 
 
// ES6 filter 
 
//var result = findObjectsByKeyValueES6(obj, 'kat', 'tkj'); 
 
console.log(result);

+0

非常感谢@loelsonk,它为我工作。 –

0

可以使用filter功能,这样做:

var yourOriginalArray = [...]; 

var result = yourOriginalArray.filter(function(item) { 
    return item.kat === "tkj"; 
}) 

@edit

详细的解释:

数组有一个内置函数,称为filter。作为一个参数,你传递一个函数,这个函数将被调用到你的数组中的每个项目(对象)。当函数返回true时,该项目被添加到结果数组中,如果它返回false,则该项目被跳过。

+0

感谢您回答我的问题^ _^ –

-1

使用.filter()是聪明
你应该通过你的对象循环

// Your object 
let obj = {...} 


function getByPropertieValue(obj, prop, value) 
{ 
    // objects with the good prop 
    let matchs = [] 
    obj.forEach(subObj => { if (subObj[prop] == value) matchs.push(subObj) }) 

    return matchs 
} 

console.log(getByPropertieValue(obj, 'kat', 'tkj')) 
+0

我相信他想找到一个数组中的对象。 – Humberd

+0

@Humberd好吧,它的工作 –

+0

谢谢^ _ ^。工作太 –

0

使用的过滤方法阵列上更通用的方式

var yourArray; //the array in your exemple 

key = 'kat'; // the key you want to filter the array accordingly 
value = 'tkj'; // the matching value for that key 
var filteredArray = yourArray.filter(function(item){ 
return item[key] === value 
} 
+0

谢谢你回答我的问题^ _^ –

0

尝试警报($( '[ID = X1')的长度。);

这里x1是id。

和使用$("[x1]").each(function(){}

+0

谢谢你回答我的问题^ _ ^ –

相关问题