因此,我有一个对象的JSON数组,而该数组又包含其他对象的数组。这样的对象数组没有特定的固定结构,因此对我来说很难做delete mainArray[0].obj.subobj[1].objToOmit;
因此,我有一个名为possibleAnswers
的键/对象,需要将其删除/省略。在我的程序中,我将一个数组的内容压入另一个数组。因此,当我将对象的第一个数组的内容推入另一个对象时,我需要省略possibleAnswers
对象。
有什么方法或功能可以搜索对象数组并帮助我省略必要的键?还是根据您的想法有什么解决方案?
示例:
这是一个最小的示例:https://codebeautify.org/jsonviewer/cb9fea0d
编辑:在上面的JSON中,有一个名为possibleMembers
的密钥,这是错误的。其possibleAnswers
var collectObservationsFromConceptSets = function () {
$scope.consultation.observations = [];
_.each($scope.consultation.selectedObsTemplates, function (conceptSetSection) {
if (conceptSetSection.observations) {
_.each(conceptSetSection.observations, function (obs) {
$scope.consultation.observations.push(obs);
});
}
});
}
在上面的代码中,当将对象推入另一个数组时,如何省略possibleAnswers
键?有什么办法可以省略吗?
非常感谢大家!这两个答案都是正确的,并且已经生成了正确的正确输出。不幸的是,我只能选择1个答案是正确的,并且它是随机的。
答案 0 :(得分:1)
如果在原始数组(如removeKey(arr, 'possibleAnswers')
)上调用,此函数将删除所有“ possibleAnswers”
function removeKey(objOrArr, keyToRemove) {
if (Array.isArray(objOrArr)) {
objOrArr.forEach(o => removeKey(o, keyToRemove));
} else if (typeof objOrArr === 'object') {
delete objOrArr[keyToRemove];
Object.values(objOrArr).forEach(v => removeKey(v, keyToRemove));
}
}
答案 1 :(得分:1)
这是一个递归省略,它使用_.transform()
来迭代并忽略数组中的一个或多个键:
const omitRecursive = (keys, obj) => _.transform(obj, (acc, v, k) => {
// if key is view, and it and has an id value replace it with equivalent from views
if(keys.includes(k)) return;
acc[k] = _.isObject(v) ? omitRecursive(keys, v) : v;
});
const data = [{"observations":[{"possibleAnswers":[],"groupMembers":[{"possibleAnswers":[]},{"groupMembers":[{"possibleMembers":[]},{"possibleMembers":[]}]}]}]},{"observations":"Same as above"},{"observations":"Same as above"}];
const result = omitRecursive(['possibleAnswers'], data);
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>