javascript - examples - underscore remove item from array
Equivalente de subrayado_.pluck en JavaScript puro (6)
¿Qué tal una reducción?
$.pluck = function(arr, key) {
return arr.reduce(function(p, v) {
return p.concat(v[key]);
}, []);
}
var people = [
{ name: ''James'', age: 26 },
{ name: ''Fred'', age: 56 }
];
$.pluck(people, ''age'');
=> [26, 56]
$.pluck(people, ''name'');
=> [''James'', ''Fred'']
Estoy intentando recrear la función de subrayado de subrayado utilizando JS puro. Sin embargo, sigo obteniendo una matriz de undefineds que se devuelve, en lugar de los valores reales de las propiedades de los objetos en una matriz.
Comprobando otro hilo here , encontré que podría reproducirlo en jQuery con el siguiente código ...
$.pluck = function(arr, key) {
return $.map(arr, function(e) { return e[key]; })
}
... sin embargo, estoy teniendo dificultades para reproducir esto en JS puro. Intenté lo siguiente, sin embargo, esto solo me está devolviendo una serie de indefinidos.
var pluck = function(arr,key){
var newArr = [];
for (var i = 0, x = arr.length; i < x; i++){
if (arr[i].hasOwnProperty(key)){
newArr.push(arr[i].key)
}
}
return newArr;
}
Por lo tanto, el objetivo sería el siguiente, excepto que en lugar de usar el guión bajo _pliegue, simplemente use un nombre de función JS, por ejemplo. var pluck = function (arr, key) {...}
var Tuts = [{name : ''NetTuts'', niche : ''Web Development''}, {name : ''WPTuts'', niche : ''WordPress''}, {name : ''PSDTuts'', niche : ''PhotoShop''}, {name : ''AeTuts'', niche : ''After Effects''}];
var niches = _.pluck(Tuts, ''niche'');
console.log(niches);
// ["Web Development", "WordPress", "PhotoShop", "After Effects"]
¿Podría alguien dirigirme en la dirección correcta?
Aquí hay una solución de trabajo.
function pluck(array,key){
var a = [],
i1 = -1, i2 = array.length,
o ;
while(++i1 < i2)
{
o = array[i1] ; // you have to use the bracket operator here
if(o.hasOwnProperty(key)) a[a.length] = o[key] ;
}
return a ;
}
Realmente no cambié mucho. La razón por la que su código falló es porque usó el operador de punto .key
para acceder a la propiedad nombrada de los elementos de la matriz en lugar del operador del corchete [key]
. Cuando utilice una referencia como clave, deberá utilizar el operador de soporte.
En ES5:
function pluck(array, key) {
return array.map(function(obj) {
return obj[key];
});
}
En ES6:
function pluck(array, key) {
return array.map(o => o[key]);
}
Estás muy cerca. Necesitas cambiar:
newArr.push(arr[i].key);
a:
newArr.push(arr[i][key]);
Considera esto:
var obj = { myKey: ''my Value'', theKey: ''another value'' };
var theKey = ''myKey'';
alert(obj.theKey); // another value
alert(obj[theKey]); // my Value
// You can also send in strings here:
alert(obj[''theKey'']); // another value
Espero que tengas mi punto.
Puedes hacerlo con el JavaScript nativo .map()
:
Array.prototype.pluck = function(key) {
return this.map(function(object) { return object[key]; });
};
editar : la modificación de los objetos prototipo incorporados debe hacerse con cuidado; una mejor manera de agregar la función (si está de acuerdo con la idea de hacerlo en general) sería con Object.defineProperty
para que no se pueda Object.defineProperty
:
Object.defineProperty(Array.prototype, "pluck", {
value: function(key) {
return this.map(function(object) { return object[key]; });
}
});
var array = {
name: ["Pedro", "João", "Francisco", "Diogo"],
ID: [1,2,3,4]
};
console.log(pluck(array,''name''));
function pluck(array, key) {
return (array[key]);
};
Puede usar esta función, haga clic en JSFiddle para ver un ejemplo! :)