У меня есть ассоциативный объект массива в Javascript, который мне нужен только частью. С регулярным массивом я просто использовал бы срез, чтобы получить нужную мне часть, но, очевидно, это не будет работать на ассоциативный массив. Есть ли встроенные функции Javascript, которые я мог бы использовать для возврата только части этого объекта? Если нет, то что будет считаться наилучшей практикой для этого? Спасибо!
Получите фрагмент ассоциативного массива Javascript?
Ответ 1
Не будет хорошего способа "нарезать" объект, нет, но вы могли бы сделать это, если бы вам действительно приходилось:
var myFields = ['field1', 'field2', 'field3'];
var mySlice = {};
for (var i in myFields) {
var field = myFields[i];
mySlice[field] = myOriginal[field];
}
Ответ 2
Я создал этот метод, который делает именно это. Он возвращает новый объект только с предоставленными аргументами и оставляет старый объект неповрежденным.
if(!Object.prototype.slice){
Object.prototype.slice = function(){
var returnObj = {};
for(var i = 0, j = arguments.length; i < j; i++){
if(this.hasOwnProperty(arguments[i])){
returnObj[arguments[i]] = this[arguments[i]];
}
}
return returnObj;
}
}
Использование:
var obj = { foo: 1, bar: 2 };
obj.slice('foo'); // => { foo: 1 }
obj.slice('bar'); // => { bar: 2 }
obj; // => { foo: 1, bar: 2 }
Ответ 3
Существует небольшая функция, которую я использую:
/**
* Slices the object. Note that returns a new spliced object,
* e.g. do not modifies original object. Also note that that sliced elements
* are sorted alphabetically by object property name.
*/
function slice(obj, start, end) {
var sliced = {};
var i = 0;
for (var k in obj) {
if (i >= start && i < end)
sliced[k] = obj[k];
i++;
}
return sliced;
}