【问题标题】:Remove first element in an array inside another array删除另一个数组中的数组中的第一个元素
【发布时间】:2019-02-16 13:45:57
【问题描述】:

我有一个从 mongo 查询返回的数组数组。我想取出并删除每个数组中的第一个项目/元素。这是我的节点路线

路线部分

let queries = [
    User.find({"companyID":req.user.companyID}, (err, foundUsers) => {
        if (err) throw err;
    }),
];
Promise.all(queries)
.then(results => {
    res.render('hr/employees', {header: 'EMPLOYEES', users: results[0]});
}).catch( err => {
    req.flash('error', err);
    res.render('hr/employees', {header: 'EMPLOYEES'});
});

示例数组

我现在拥有的

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

我想要什么

[[2, 3], [5,6], [8,9]]

【问题讨论】:

  • 请发布您的数组数组。同样从该数组数组中写入您预期的数组数组。
  • @VicJordan 那毫无意义。我将添加一组示例数组,但我怀疑是否有人想查看 2k 行 JSON,这是我的数组将包含的内容。
  • 没有人要求您发布实际的 2k 行 json,但希望您发布具有较少代码行的示例结构。希望你理解

标签: javascript arrays node.js mongodb mongoose


【解决方案1】:

假设results 是一个数组数组。在 map 中使用 slice 删除第一个元素并返回所需的数组。

Promise
  .all(queries)
  .then(results => (results.map(result => (result.slice(1)))))
  .then(adaptedResults => res.render('hr/employees', { header: 'EMPLOYEES', users: adaptedResults[0] });

编辑:使用您提供的值。

console.log([[1, 2, 3], [4, 5, 6], [7, 8, 9]].map(arr => (arr.slice(1))))

【讨论】:

  • 谢谢,当我将它插入路由时,它会给出语法错误,我不知道.map 足以排除故障。我将如何获取您所拥有的然后将结果发送到我的res.render
  • 感谢您的编辑,它成功了!我不得不再添加几个),但其他方面都很好,谢谢。
  • 我已经更新了我的答案。此外,您可以在同一个 .then 中执行此操作,如下所示: .then(results => { const adaptResults = results.map(result => (result.slice(1))); res.render('hr/employees' , {标题:'EMPLOYEES',用户:adaptedResults[0]}); })
【解决方案2】:

这样的事情应该可以完成,

const arrOfArrays = []; // get value from response
// remove first element from all arrays safely
const newArr = arrOfArrays.map(arr => (arr && arr.length) ? arr.shift() : arr); 

编辑:正如@rghossi 指出的那样,上面的 sn-p 应该返回一个第一个元素的数组。所以正确的做法是,

const arrOfArrays = []; // get value from response
// remove first element from all arrays safely
const newArr = arrOfArrays.map(arr => (arr && arr.length) ? arr.slice(1) : arr); 

【讨论】:

  • 刚刚尝试了一下,并对其进行了一些修改,但似乎都不起作用。也许我将不得不尝试在 EJS 中处理这个问题
  • @joshk132 我刚刚更新了我的答案。 .map 将返回一个新数组,您必须将其分配给一个新变量才能使用更新后的结果。
  • @joshk132 很高兴听到这个消息。如果你能接受这个答案,它会帮助别人。
  • 这实际上是不正确的。 arr.shift() 将仅返回已删除的元素,而不是修改后的数组。您可以改用slice(1) 或更改您的实现以在arr.shift() 之后返回arr
【解决方案3】:

听起来像 Array.prototype.shift() 就是你要找的东西:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift

【讨论】:

  • 是的,我知道 shift() 但这只会删除我的数组集中的第一个数组。
【解决方案4】:

您可以轻松使用slice()shift() 方法

for (i = 0; i < results.length; i++) {
    results[i].slice(1);//OR you can use results[i].shift()
}

或者你可以修改你的代码:

Promise.all(queries)
.then(results => (results.map(result => (result.shift())) {
    //OR you can use result.slice()
    //Your code here
});

它将删除数组数组中的所有第一个元素。

【讨论】:

  • 我意识到这是一种选择,但正在寻找一种更清洁的方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多