我已经编写了这个函数来返回两个数组中相同值的新数组。它工作正常但我使用了两个循环,它给出了O(n ^ 2)的运行时间。任何改善此函数运行时的建议。
var dynamicConfig = ["Test1","Test22","Test3","Test14"];
var staticConfig = [{label: 'Test 1',value: 'Test1'},
{label: 'Test 2',value: 'Test2'},
{label: 'Test 3',value: 'Test3'}
];
function configObj(dynamicConfig, staticConfig) {
var templateArray = [];
for (var i = 0; i < dynamicConfig.length; i++) {
for (var j = 0; j < staticConfig.length; j++) {
if (dynamicConfig[i] === staticConfig[j].value) {
templateArray.push(staticConfig[j]);
break;
}
}
}
console.log(templateArray);
return templateArray;
}
configObj(dynamicConfig, staticConfig);
有jsfiddle同样的工作。
答案 0 :(得分:1)
何时找到数组中的公共元素,最好先对两个数组进行排序,然后很容易找到公共元素。 但是来到javascript你可以使用es6 Set功能来简化任务..
下面是我的代码,它可能显示为O(n ^ 2)但信任我Set.has
的速度快于
array.indexOf
这是证明 - &gt; https://jsperf.com/array-indexof-vs-set-has
let dynamicConfig1 = ["Test1","Test22","Test3","Test14"];
let staticConfig = [
{
label: 'Test 1',
value: 'Test1'
},
{
label: 'Test 2',
value: 'Test2',
},
{
label: 'Test 3',
value: 'Test3',
}
];
let dynamicConfig = new Set([...dynamicConfig1.map((item)=>item)])
let commonElements = [...staticConfig].filter(x => dynamicConfig.has(x.value));
console.log(commonElements)
而小提琴
答案 1 :(得分:0)
一种解决方案是将第二个'staticConfig'数组转换为javascript对象或将其转换为javascript对象。 Javascript在内部使用hashmap来实现任何对象。然后,您可以使用具有复杂度O(1)的map ['Test 1']来获取对象。但是您必须在单独的循环中转换列表以在对象中进行转换。整体复杂性将来自O(n)。由于您只需要比较'staticConfig'中对象的值字段,您也可以使用javascript set object。 你可以尝试这样的事情:
<?php
include '../includes/config.php';
//SQL QUERY
$query = mysqli_query($conn, "SELECT * FROM post ORDER BY id ASC");
if (isset($_POST["submit"])) {
$title = $_POST["title"];
$description = $_POST["description"];
$article = $_POST["article"];
}
?>
//HTML
<?php if (isset($_POST["update"])) { ?>
<body>
<form method="post">
<div class="form-group">
<label for="exampleFormControlFile1">Choose the image</label>
<input type="file" class="form-control-file" id="exampleFormControlFile1">
</div>
<div class="form-group">
<label">Title</label>
<input type="text" class="form-control" name="title" placeholder="Title" <?php echo $row["title"]; ?>>
</div>
<div class="form-group">
<label for="exampleInputPassword1">Description</label>
<input type="text" class="form-control" name="description" placeholder="Description">
</div>
<div class="form-group">
<label for="exampleFormControlTextarea1">Article</label>
<textarea class="form-control" name="article" rows="3"></textarea>
</div>
<button type="submit" class="btn btn-primary" name="submit">Post</button>
</form>
<?php if (mysqli_num_rows($query)) { ?>
<?php while ($row = mysqli_fetch_array($query)) {?>
<strong>
<h1><?php echo $row["title"]; ?></h1>
</strong>
<h3><?php echo $row["description"]; ?></h3>
<p><?php echo $row["article"]; ?></p>
<button class="btn btn-warning" name="update">
<a href="#">Update</a>
</button>
<hr />
<?php } ?>
<?php } ?>
</body>
或使用Set
var dynamicConfig = ["Test1","Test22","Test3","Test14"];
var staticConfig = [{label: 'Test 1',value: 'Test1'},
{label: 'Test 2',value: 'Test2'},
{label: 'Test 3',value: 'Test3'}
];
var map = {};
for(var i = 0; i < staticConfig.length; i++){
var obj = staticConfig[i];
map[obj.value] = obj.label;
}
function configObj(dynamicConfig, staticConfig) {
var templateArray = [];
for (var j = 0; j < dynamicConfig.length; j++) {
if (map[dynamicConfig[j]] != null && map[dynamicConfig[j]] != undefined && map[dynamicConfig[j]] != 'undefined') {
templateArray.push(dynamicConfig[j]);
}
}
console.log(templateArray);
return templateArray;
}
configObj(dynamicConfig, staticConfig);
答案 2 :(得分:-1)
以下代码的时间复杂度为O(n)。你也可以比较一下 通过计算开始和结束时间来执行循环所花费的时间。
var dynamicConfig = ["Test1","Test22","Test3","Test14"];
var staticConfig = [{label: 'Test 1',value: 'Test1'},
{label: 'Test 2',value: 'Test2'},
{label: 'Test 3',value: 'Test3'}
];
function configObj(dynamicConfig, staticConfig) {
var templateArray = [];
for (var j = 0; j < staticConfig.length; j++) {
if (dynamicConfig.includes(staticConfig[j].value)) {
templateArray.push(staticConfig[j]);
}
}
console.log(templateArray);
return templateArray;
}
configObj(dynamicConfig, staticConfig);
&#13;