我一直在努力使用jscodeshift
将新对象添加到对象数组中。我的问题是得到VariableDeclarator
之后,我不知道该如何查询数组。我需要插入数组中的最后一个元素,之后才能插入新节点。这是代码:
export default function transformer(file, api) {
const j = api.jscodeshift;
const root = j(file.source);
const changeList = root.find(j.VariableDeclarator, {
id: {name: 'list'},
}).closest(j.ArrayExpression, {
elements: [""]
}).replaceWith(p => {
console.log(p);
}).toSource();
};
我正在AST explorer上玩它
答案 0 :(得分:3)
.closest
返回最匹配该类型的 ancestor 节点。 ArrayExpression
是后代,因此您必须再次使用.find
。这有效:
export default function transformer(file, api) {
// import jscodeshift
const j = api.jscodeshift;
// get source code
const root = j(file.source);
// find a node
return root.find(j.VariableDeclarator, {id: {name: 'list'}})
.find(j.ArrayExpression)
.forEach(p => p.get('elements').push(j.template.expression`x`))
.toSource();
};