我有多个索引数组,代表一个顺序:
[[0,1,2], [2,0,1], [1,2,0], [0,1,2], ...]
我需要构造一个新的索引数组,其长度等于输入中索引的总数,同时使用输入中每个数组中指示的位置对值进行排序。
这将是上面输入的输出:
[0, 1, 2, 5, 3, 4, 7, 8, 6, 9, 10, 11, ...]
答案 0 :(得分:1)
我对你的例子很困惑,但听起来你想要将你的数组压平一层。你可以这样做:
package com.example.crud;
import java.text.SimpleDateFormat;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.example.crud.entities.Users;
import com.example.crud.service.TaskService;
@Controller
public class HomeController {
@Autowired
private TaskService service;
private Logger logger = LoggerFactory.getLogger(HomeController.class);
@InitBinder
public void initBinder(WebDataBinder binder){
System.out.println("exe");
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
sdf.setLenient(true);
binder.registerCustomEditor(java.sql.Date.class,"DateOfBirth", new CustomDateEditor(sdf, true));
}
@RequestMapping(value="/Add", method=RequestMethod.GET)
public String index(Map<String, Object> model){
Users users = new Users();
model.put("users", users);
logger.debug("users");
return "home";
}
@RequestMapping(value="/Register", method=RequestMethod.POST)
public String Register(@ModelAttribute("users") Users users, BindingResult result, Model model){
System.out.println(users.getFirst_Name());
System.out.println(users.getDateOfBirth());
// service.Register(users);
return "home";
}
}
如果您使用的是像Underscore这样的库,那么有一些内置方法可以做到这一点,例如flatten
method。
答案 1 :(得分:1)
您可以使用Array#reduce
,Array#forEach
以及实际数组的长度来计算。然后将所有长度的总和推送到结果集。
var array = [[0, 1, 2], [2, 0, 1], [1, 2, 0], [0, 1, 2]],
result = [];
array.reduce(function (r, a) {
a.forEach(function (b) {
result.push(r + b);
});
return r + a.length;
}, 0);
console.log(result);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
答案 2 :(得分:0)
输入和输出示例令人困惑,但我想你想要它:
var array = [...] // your array
var result = Array.prototype.concat.apply([], array);
答案 3 :(得分:0)
我相信我会根据预期的输出解释您的问题,并相应地编辑问题。
您需要循环输入中的子数组并获取输出的下一组索引,然后使用子数组的顺序将这些索引添加到输出中。
这似乎可以解决问题:
var input = [[0, 1, 2], [2, 0, 1], [1, 2, 0], [0, 1, 2]];
var output = [];
// add values to the output for each of the inputs
$.each(input, function (index, value) {
// get the next and last values to add
var startIndex = output.length;
var lastIndex = (startIndex + value.length) - 1;
// make an array of sequential values from startIndex to lastIndex
var arrayToAdd = [];
for (var i = startIndex; i <= lastIndex; i++) {
arrayToAdd.push(i);
}
// add the values from arrayToAdd in the order of the indexes in the input
$.each(value, function (innerindex, innerindexvalue) {
output.push(arrayToAdd[innerindexvalue]);
});
});
console.log(output);