recorrer objetos objeto lista especifico eliminar elemento convertir buscar array agregar javascript arrays

especifico - lista de objetos javascript



Encontrar un valor en una matriz de objetos en Javascript (20)

¿Está buscando una Búsqueda genérica (Filtro) en el elemento de la lista de objetos sin especificar la clave del elemento?

Entrada

var productList = [{category: ''Sporting Goods'', price: ''$49.99'', stocked: true, name: ''Football''}, {category: ''Sporting Goods'', price: ''$9.99'', stocked: true, name: ''Baseball''}, {category: ''Sporting Goods'', price: ''$29.99'', stocked: false, name: ''Basketball''}, {category: ''Electronics'', price: ''$99.99'', stocked: true, name: ''iPod Touch''}, {category: ''Electronics'', price: ''$399.99'', stocked: false, name: ''iPhone 5''}, {category: ''Electronics'', price: ''$199.99'', stocked: true, name: ''Nexus 7''}] function customFilter(objList, text){ if(undefined === text || text === '''' ) return objList; return objList.filter(product => { let flag; for(let prop in product){ flag = false; flag = product[prop].toString().indexOf(text) > -1; if(flag) break; } return flag; });}

Ejecutar

customFilter(productList, ''$9'');

Esta pregunta ya tiene una respuesta aquí:

Sé que preguntas similares se han hecho antes, pero esta es un poco diferente. Tengo una matriz de objetos sin nombre, que contienen una matriz de objetos con nombre, y necesito obtener el objeto donde "nombre" es "cadena 1". Aquí hay una matriz de ejemplo.

var array = [ { name:"string 1", value:"this", other: "that" }, { name:"string 2", value:"this", other: "that" } ];

Actualización: debería haber dicho esto antes, pero una vez que lo encuentro, quiero reemplazarlo con un objeto editado.


Nueva respuesta

Agregué el prop como parámetro, para hacerlo más general y reutilizable.

/** * Represents a search trough an array. * @function search * @param {Array} array - The array you wanna search trough * @param {string} key - The key to search for * @param {string} [prop] - The property name to find it in */ function search(array, key, prop){ // Optional, but fallback to key[''name''] if not selected prop = (typeof prop === ''undefined'') ? ''name'' : prop; for (var i=0; i < array.length; i++) { if (array[i][prop] === key) { return array[i]; } } }

Uso:

var array = [ { name:''string 1'', value:''this'', other: ''that'' }, { name:''string 2'', value:''this'', other: ''that'' } ]; search(array, ''string 1''); // or for other cases where the prop isn''t ''name'' // ex: prop name id search(array, ''string 1'', ''id'');

Prueba de moca:

var assert = require(''chai'').assert; describe(''Search'', function() { var testArray = [ { name: ''string 1'', value: ''this'', other: ''that'' }, { name: ''string 2'', value: ''new'', other: ''that'' } ]; it(''should return the object that match the search'', function () { var name1 = search(testArray, ''string 1''); var name2 = search(testArray, ''string 2''); assert.equal(name1, testArray[0]); assert.equal(name2, testArray[1]); var value1 = search(testArray, ''this'', ''value''); var value2 = search(testArray, ''new'', ''value''); assert.equal(value1, testArray[0]); assert.equal(value2, testArray[1]); }); it(''should return undefined becuase non of the objects in the array have that value'', function () { var findNonExistingObj = search(testArray, ''string 3''); assert.equal(findNonExistingObj, undefined); }); it(''should return undefined becuase our array of objects dont have ids'', function () { var findById = search(testArray, ''string 1'', ''id''); assert.equal(findById, undefined); }); });

resultados de la prueba:

Search ✓ should return the object that match the search ✓ should return undefined becuase non of the objects in the array have that value ✓ should return undefined becuase our array of objects dont have ids 3 passing (12ms)

Antigua respuesta - eliminado debido a malas prácticas.

Si quieres saber más por qué es una mala práctica, consulta este artículo:

¿Por qué es una mala práctica extender objetos nativos?

Versión prototipo de hacer una búsqueda en matriz:

Array.prototype.search = function(key, prop){ for (var i=0; i < this.length; i++) { if (this[i][prop] === key) { return this[i]; } } }

Uso:

var array = [ { name:''string 1'', value:''this'', other: ''that'' }, { name:''string 2'', value:''this'', other: ''that'' } ]; array.search(''string 1'', ''name'');


Encontrando el elemento array:

let arr = [ { name:"string 1", value:"this", other: "that" }, { name:"string 2", value:"this", other: "that" } ]; let obj = arr.find(o => o.name === ''string 1''); console.log(obj);

Reemplazando el elemento de la matriz:

let arr = [ { name:"string 1", value:"this", other: "that" }, { name:"string 2", value:"this", other: "that" } ]; let obj = arr.find((o, i) => { if (o.name === ''string 1'') { arr[i] = { name: ''new string'', value: ''this'', other: ''that'' }; return true; // stop searching } }); console.log(arr);


Aquí está la solución para buscar y reemplazar.

function searchAndUpdate(name,replace){ var obj = array.filter(function ( obj ) { return obj.name === name; })[0]; obj.name = replace; } searchAndUpdate("string 2","New String 2");


Con un foreach:

let itemYouWant = null; array.forEach((item) => { if (item.name === ''string 1'') { itemYouWant = item; } }); console.log(itemYouWant);


En ES6 puedes usar Array.prototype.find(predicate, thisArg?) Así:

array.find(x => x.name === ''string 1'')

http://exploringjs.com/es6/ch_arrays.html#_searching-for-array-elements https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/find

Para luego reemplazar dicho objeto (y usar otro método de fill ES6 ), podría hacer algo como:

let obj = array.find(x => x.name === ''string 1''); let index = array.indexOf(obj); array.fill(obj.name=''some new string'', index, index++);


Esta respuesta es buena para mecanografiado / Angular 2, 4, 5+

Obtuve esta respuesta con la ayuda de @rujmah. Respuesta anterior. Su respuesta introduce el conteo de matrices ... y luego encuentra el valor y lo reemplaza por otro valor ...

Lo que hace esta respuesta es simplemente tomar el nombre del arreglo que podría configurarse en otra variable a través de otro módulo / componente ... en este caso, el arreglo que construí tenía un nombre css de fechas de permanencia. Entonces, lo que esto hace es extraer ese nombre y luego me permite establecerlo en otra variable y usarlo así. En mi caso fue una clase html css.

let obj = this.highlightDays.find(x => x.css); let index = this.highlightDays.indexOf(obj); console.log(''here we see what hightlightdays is '', obj.css); let dayCss = obj.css;


O use un simple for -loop:

var result = null; for (var i = 0; i < array.length; i++) { if (array[i].name === "string 1") { result = array[i]; break; } }

O si puede, es decir, si su navegador lo admite, use Array.filter , que es mucho más conciso:

var result = array.filter(function (obj) { return obj.name === "string 1"; })[0];


Otra forma (para ayudar a los comentarios de @NullUserException y @ Wexoni) es recuperar el índice del objeto en la matriz y luego ir desde allí:

var index = array.map(function(obj){ return obj.name; }).indexOf(''name-I-am-looking-for''); // Then we can access it to do whatever we want array[index] = {name: ''newName'', value: ''that'', other: ''rocks''};


Puede recorrer la matriz y probar esa propiedad:

function search(nameKey, myArray){ for (var i=0; i < myArray.length; i++) { if (myArray[i].name === nameKey) { return myArray[i]; } } } var array = [ { name:"string 1", value:"this", other: "that" }, { name:"string 2", value:"this", other: "that" } ]; var resultObject = search("string 1", array);


Puede utilizar query-objects de query-objects de npm. Puedes buscar una matriz de objetos usando filtros.

const queryable = require(''query-objects''); const users = [ { firstName: ''George'', lastName: ''Eracleous'', age: 28 }, { firstName: ''Erica'', lastName: ''Archer'', age: 50 }, { firstName: ''Leo'', lastName: ''Andrews'', age: 20 } ]; const filters = [ { field: ''age'', value: 30, operator: ''lt'' }, { field: ''firstName'', value: ''Erica'', operator: ''equals'' } ]; // Filter all users that are less than 30 years old AND their first name is Erica const res = queryable(users).and(filters); // Filter all users that are less than 30 years old OR their first name is Erica const res = queryable(users).or(filters);


Puedes hacerlo con un simple bucle:

var obj = null; for (var i = 0; i < array.length; i++) { if (array[i].name == "string 1") { obj = array[i]; break; } }


Según ECMAScript 6, puede utilizar la función findIndex .

array[array.findIndex(x => x.name == ''string 1'')]



Similar a las respuestas anteriores usé lo siguiente:

Array.prototype.getIemtByParam = function(paramPair) { var key = Object.keys(paramPair)[0]; return this.find(function(item){return ((item[key] == paramPair[key]) ? true: false)}); }

uso:

myArray.getIemtByParam( {name: ''Sasha''} );


Teniendo en cuenta que tienes el siguiente fragmento:

var array = [ { name:"string 1", value:"this", other: "that" }, { name:"string 2", value:"this", other: "that" } ];

Puedes usar la siguiente función para buscar artículos

const search = what => array.find(element => element.name === what);

Y puedes verificar si el artículo fue encontrado o no.

if (search("string 1")) { console.log(search.value, search.other); } else { console.log(''No result found''); }


Una línea de respuesta. Puede utilizar la función de filtro para obtener resultados.

var array = [ { name:"string 1", value:"this", other: "that" }, { name:"string 2", value:"this", other: "that" } ]; console.log(array.filter(function(arr){return arr.name == ''string 1''})[0]);


con underscore.js use el método findWhere:

var array = [ { name:"string 1", value:"this", other: "that" }, { name:"string 2", value:"this", other: "that" } ]; var result = _.findWhere(array, {name: ''string 1''}); console.log(result.name);

Ver esto en JSFIDDLE


function getValue(){ for(var i = 0 ; i< array.length; i++){ var obj = array[i]; var arr = array["types"]; for(var j = 0; j<arr.length;j++ ){ if(arr[j] == "value"){ return obj; } } } }


var array = [ { name:"string 1", value:"this", other: "that" }, { name:"string 2", value:"this", other: "that" } ]; var foundValue = array.filter(obj=>obj.name===''string 1''); console.log(foundValue);